当前位置: 首页 > news >正文

MySQL基础和 表的‘CRUD’(基础版)

目录

MySQL数据库基础

1. 数据库的操作

        1.1 创建数据库

1.2显示当前的数据库

1.3使用数据库

 1.4删除数据库

2.常用的数据类型:

2.1数值类型:

2.2字符串类型

 2.3日期类型

 3.表的操作

3.1创建表

3.2查看表结构

3.3查看数据所有的表

3.4删除表

MySQL表的增查改删(CRUD)

1.CRUD

2.增加(Create) 

2.1单行插入 

2.2指定行插入

2.3一次插入多个记录:

3.查询(Retrieve)

3.1全列查询

3.2 指定列查询

3.3别名(AS)

3.4去重(DISTINCT)

3.5排序 (ORDER BY)

 3.6条件查询

 

3.7 范围查询

3.8模糊查询(LIKE)

3.9NULL查询( IS [NOT] NULL)

 3.9分页查询LIMIT

4.修改(Update)

5. 删除(Delete)


MySQL数据库基础

1. 数据库的操作

        1.1 创建数据库

CREATE DATABASE 数据库名;
注意:
  1. create,database...相当于“关键字”.
  2. SQL的关键字不区分大小写的.
  3. 创建的数据库的名字可以随便取,但是不能重复!!
  4. 单词之间至少一个空格,也可以是多个,不能没有!!!
  5. 在命令行中输入sql必须以 ; 作为结尾!!

在MySQL安装与配置【windows&Mac】完成配置后,打开目标文件所在位置,输入密码并创建数据库。当出现红色框标识时,即表示数据库创建成功。

标准的创建数据库语句:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
  •  []里的内容是可选的~
  • IF NOT EXISTS如果不存在,才创建.如果存在就什么也不用干~(不会报错)
create database test1 charset utf8;
  •   charset utf8character set uft8的缩写,创建数据库同时指定数据库的字符集~
  • 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8

字符集是干什么的???

问:一个汉字,占几个字节?

A:2个

B:3个

C:4个

答案是全错!!

得看它的【编码】!

字符集就是针对汉字进行编码~

英文字母在计算机里如何表示?

ascii~~使用数字表示字符~~

而汉字要表示的特别多~几万个~所以要一个更大的表来表示汉字~

vs使用的编码方式是跟随系统的,windows简体中文版,系统编码就是gbk

  • gbk:   使用两个字节表示一个汉字
  • utf8使用三个字节表示一个汉字

目前更主流的还是utf8,这个东西能表示的内容特别多~~

除了汉字之外,各种其他国家的语言文字符号都能表示~~

所以手动设定一个字符集是非常关键的!!!

后续如果要插入一些中文,如果不是utf8/gbk之类的中文就会乱码~~

在网上还有的能看到utf8b4(完整版),在MySQL中utf8是残缺的(残缺了一些emoji表情)

1.2显示当前的数据库

SHOW DATABASES;

1.3使用数据库

USE 数据库名;

 1.4删除数据库

DROP DATABASE 数据库名;
  • 删除数据库,内部就看不到对应的数据库,里面的表和数据全部被删除,所以如果和公司没死仇就别删库跑路 。

2.常用的数据类型:

2.1数值类型:

分为整型和浮点型:

数据类型大小说明对应的java类型
BIT[ (M) ]
M指定位数,默认为1
二进制数,M 范围从 1 64 , 存储数值范围从0 2^M-1
常用 Boolean 对应 BIT ,此时
默认是 1 位,即只能存 0 1
TINYINT1字节Byte
SMALLINT2字节Short
INT4字节Integer
BIGINT8字节Long
FLOAT(M,D)4字节单精度,M指定长度,D指定小数位数,会发生精度丢失Float
DOUBLE(M,D)8字节Double
DECIMAL(M,D)M/D最大值+2单精度,M指定长度,D指定小数位数,精确数值BigDecimal
NUMERIC(M,D)M/D最大值+2和DECIMAL一样BigDecimal
  • 如float(3,1)就得55.2,22.4这种
  • float和double是不能竞争表示小数的!!
  • DECIMAL能够精确表示小数

2.2字符串类型

数据类型大小说明对应java类型
VARCHAR(SIZE)
0-65,535 字节
可变长度字符串
String
TEXT0-65,535字节长文本数据String
MEDIUMTEXT0-16777215字节中等长文本数据String
BLOB0-65,535字节二进制形式的长文本数据String
  • varchar(size)属于可变长的字符串~~
  • size表示最大长度,单位是字符(不是字节!!!)
  • varchar(10)=>最多十个字~~

 2.3日期类型

数据类型大小说明对应java类型
DATETIME
8字节
范围从 1000 9999 年,不会进行时区的
检索及转换。
java.util.Date
java.sql.Timestamp
TIMESTAMP
4字节
范围从 1970 2038 年,自动检索当前时 区并进行转换。
java.util.Date
java.sql.Timestamp
  • DETETIME这个时间更充足一些~~

 3.表的操作

------------------------------------------------------先使用数据库!--------------------------------------------------------

3.1创建表
CREATE TABLE 表名(
field1 datatype;
field2 datatype;
field3 datatype;
);
  • 可以使用comment增加字段说明
create table student (name varchar(20) comment '姓名' , age int , password varchar(20) comment '密码');

注意:

  • 创建表格之前要先使用数据库!!!           
    use 数据库名;
    否则会报错
    ERROR 1046 (3D000): No database selected
  • 单词之间一定要有空格!!!尤其是表名和后面的()有空格!!!            否则报错
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
3.2查看表结构
desc 表名;

  1. field 字段
  2. type 类型
  3. null 该列是否允许为空
  4. default 默认值
  5. Extra 额外补充
3.3查看数据所有的表
show tables;
  • 不要轻易的查看,前提是库中的表特别多的情况!!
3.4删除表
DROP TABLE 表名;

MySQL表的增查改删(CRUD)

1.CRUD

CRUD 即增加 ( Create ) 、查询 ( Retrieve ) 、更新 ( Update ) 、删除 ( Delete ) 四个单词的首字母缩写。

2.增加(Create) 

insert into 表名 values (值,值...);

(值,值....)此处列出的这些值的数目和类型表的相匹配。

2.1单行插入 

 😈tips:

  • SQL表示字符串,使用 或者  都是可以的.
  • SQL中没有“字符”类型(大部分没有字符类型的编程语言,都是允许单引号和双引号表示字符串,并且单双银行通常是等价的).
  • Python,JS,PHP,Linux,Shell....都是属于没有字符类型,单双银行都表示字符串的.

2.2指定行插入

  • 使用   ()  来标识当前要针对哪些列插入.
  • 多个列名之间可以使用 来分割.
  • 后续 values 里的列,必须要和当前 ()  中的个数类型匹配

2.3一次插入多个记录:

在values后面可以有多个(),多个()之间使用  , 分割,每一组 () 就是一条记录(也就是一行)

3.查询(Retrieve

3.1全列查询

select * from 表名;
  •   *   是通配符(相当于斗地主的癞子牌).
  • 这个操作就是查询当前数据库中所有的行和所有的列 .

    3.2 指定列查询

    select 列名 from 表名;

    也可以使数学+10查询

    此处看到的客户端的结果其实是一个临时表.

    select操作不管怎么写,都不会影响到数据库服务器硬盘上存储的原始数据.

    3.3别名(AS)

    •  为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
    select 列名 as 别名 from 表名;
    • 别名会最终显示在查询结果的临时表中.
    • as 关键字,可以省略,但是建议不要省略

     

    3.4去重(DISTINCT)

    • 使用 DISTINCT 关键字对某列数据进行去重
    select distinct 列名 from 表名;

    3.5排序 (ORDER BY)

    ASC       为序(从小到大)可以省略不写.

    DESC     为序(从大到小)

    select 列名, 列名 from 表名 order by 列名;
    select 列名, 列名 from 表名 order by 列名 desc;

    依据英语成绩排序。 

    order by 还能指定多个列排序(order by 后面可以写多个列)

     此处是先拿english这一列进行排序,如果english相同了,然后根据math排序

     3.6条件查询

    比较运算符:

    运算符说明
    >, >=, <, <=
    大于,大于等于,小于,小于等于
    =
    等于, NULL 不安全,例如 NULL = NULL 的结果是 NULL
    <=>
    等于, NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
    !=,<>不等于
    BETWEEN a0 AND an
    范围匹配, [a0, a1] ,如果 a0 <= value <= a1 ,返回 TRUE(1)
    IN (option, ...)如果是 option 中的任意一个,返回 TRUE(1)
    IS NULL NULL
    IS NOT NULL不是 NULL
    like
    模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符

     逻辑运算符:

    运算符说明
    AND
    多个条件必须都为 TRUE(1) ,结果才是 TRUE(1)
    OR
    任意一个条件为 TRUE(1), 结果为 TRUE(1)
    NOT
    条件为 TRUE(1) ,结果为 FALSE(0)
    😈(注意):
    1. WHERE条件可以使用表达式,但不能使用别名.
    2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分.

    • WHERE条件可以使用表达式,但不能使用别名。

    注意区分:

     报错:

    •  当我们在条件中,尝试使用别名的时候,这个别名不能被正确的识别出来.
    • MySQL的where条件中,无法使用列的别名!!!
    • 从数据库设计的角度来看,MySQL是完全可以做到让where子句中,能识别出别名的,但是确实现在MySQL没支持,不能保证若干年后某个新版本就能支持了.
    • 不支持别名属于结论,属于MySQL对于语法的规定.
    • AND的优先级高于OR,在同时使用时,需要使用小括号 ()  包裹优先执行的部分

     

    • 在SQL中,and的优先级比or更高,但没什么用~~
    • 建议使用  ()  收到的明确优先级~~ 

    3.7 范围查询

    • BETWEEN...AND...
    1. 查询语文成绩在80-90之间的同学
      select name,chinese from exam_result where between 80 and 90;
    2. 也可以使用AND实现
      select name,chinese from exam_result where chinese >= 80 and chinese <= 90;
    • IN
    1. 查询数学成绩是58或者59或者60的同学
      select name,math from exam_result where math in (58,59,60);
    2. 也可以使用OR实现

      select name, math from exam_result where math = 58 or math =69 or math =60;

    3.8模糊查询(LIKE)

      %    匹配0个或者任意多个字符

    • 查询姓’孙‘的同学
      select * from exam_result where name like '孙%';
    • 查询姓以’孙‘结尾的同学

      ​select * from exam_result where name like '%孙';
    • 查询姓名中有’孙‘字的同学

      ​select * from exam_result where name like '%孙%';

    📌:金角大王举葫芦喊:“孙行者!”悟空挠头:“你认错人啦,我是‘者行孙’~”✨ 妖怪刚掏出本子记名字,他又蹦跶:“错错错,我是‘行者孙’本孙!”🌚 葫芦:“这届猴子咋这么会玩文字狱啊喂!”😤

            _    匹配一个字符

    • 想查到孙某的信息
      ​select * from exam_result where name like '孙_';
    • 想查到孙某某的信息

      select * from exam_result where name like '孙__';
    • 想查到孙某某某的信息

      select * from exam_result where name like '孙___';

    3.9NULL查询( IS [NOT] NULL)

    • 查询语文成绩为空
    select * from exam_result where chinese =null;

    这里null =null =>null  =>false  (条件不成立!!)

     select * from exam_result where chinese <=> null;select * from exam_result where chinese is null;

     这两句都可以

       3.9分页查询LIMIT

      select 列名 from 表名[where ...] [order by ...]  limit  n;

      针对查询的结果进行截取,截取其中的一部分~~

       

      一次查询,最多获得3条记录~~ 约束力结果中最多包含几个记录。

      offset   3  表示描述了当前的结果,哪一条开始算,这是表示从下标为3的记录开始获得的(下标从0开始算

      4.修改(Update

      update 表名 set 列名 = 值 where 条件...;

       进行修改,要明确一些重要的信息

      1. 改哪个表~
      2. 改这个表里面的哪个列/哪些列改成什么~
      3. 改这个表的哪些行~
      update exam_result set math = 80 where name = '孙悟空';

      此处的修改是修改MySQL服务器,保存在硬盘上的数据  (持久生效的).

      • 如果没有指定条件
      update exam_result set math = 0 ;

       所有的数据都会改变!

      •  删库,是指所有的数据删除,你可以根据之前的备份导入进来
      • update修改的条件没设定好,你也不知道,当前哪些行被修改了,哪些没修改!!
      • 所以修改和删库相比还是不逞多让的,甚至还犹有过之~

      5. 删除(Delete

      delete from 表名 where 条件;
      

      删除,是按照行来删除的,无法删除某些列~~(想要按照列删除,可以通过update,指定条件的韩的指定列,设为null) 。

      delete from exam_result;

      这是删除整个表里面的数据,表格还在

      drop table 删除后就是全都没了。

      基础版的CURD就这些,稍微进阶点的在下一篇文章~~~

        http://www.dtcms.com/a/267428.html

        相关文章:

      • 基础数据结构第04天:单向链表(概念篇)
      • ubuntu手动编译VTK9.3 Generating qmltypes file 失败
      • 解决URL编码兼容性问题:空格转义与HTML实体解码实战
      • 基于企业私有数据实现智能问答
      • 动手学深度学习-学习笔记(总)
      • Kali Linux Wifi 伪造热点
      • 基于Java+SpringBoot的三国之家网站
      • 嵌入式系统内核镜像相关(十二)
      • Flink-Source算子点位提交问题(Earliest)
      • 力扣 hot100 Day35
      • STM32中实现shell控制台(命令解析实现)
      • MySQL回表查询深度解析:原理、影响与优化实战
      • 从UI设计到数字孪生实战部署:构建智慧城市的智慧照明系统
      • 【项目笔记】高并发内存池项目剖析(三)
      • NX二次开发——NX二次开发-检查点是否在面上或者体上
      • MPLS 多协议标签交换
      • Python实例题:基于 Python 的简单聊天机器人
      • springsecurity5配置之后启动项目报错:authenticationManager cannot be null
      • LangChain4j 框架模仿豆包实现智能对话系统:架构与功能详解
      • windows 安装 wsl
      • 基于matlab卡尔曼滤波器消除噪声
      • 点击方块挑战小游戏流量主微信小程序开源
      • Java+Vue开发的进销存ERP系统,集采购、销售、库存管理,助力企业数字化运营
      • 浏览器与服务器的交互
      • 深度学习图像分类数据集—百种鸟类识别分类
      • STM32中实现shell控制台(shell窗口输入实现)
      • 结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
      • rk3128 emmc显示剩余容量为0
      • kubectl exec 遇到 unable to upgrade connection Forbidden 的解决办法
      • 浅度解读-(未完成版)浅层神经网络-多个隐层神经元