type
status
date
slug
summary
tags
category
icon
password
基础学习
MySQL数据类型
数据类型,指的是数据表中的列中支持存放的类型
数值类型
在MySQL中有多种数据类型可以存放数值,不同的类型存放的数值的范围或者形式是不同的
类型 | 内存空间大小 | 范围 | 说明 |
tiny | 1byte(8bit) | 有符号:-128-127无符号:0~255 | 只能存放小的数 |
smalint | 2byte | 有符号 *32768~32767无符号 0~65535 | 小型整数 |
mediumint | 3byte | ㅤ | 中型整数 |
int/integer | 4byte | ㅤ | 整数(默认用int) |
bigint | 8byte | ㅤ | 大型整数(int不够了用这个) |
float | 4byte | ㅤ | 单精度 |
double | 8byte | ㅤ | 双精度(默认使用) |
decimal | 第一参数+2 | ㅤ | decimal(10,2)表示数值一共有10位小数位有2位 |
ㅤ | ㅤ | ㅤ | ㅤ |
字符串类型
存储字符序列的类型
类型 | 字符序列的长度范围 | 说明 |
char | 0~255字节 | 定长字符串,最多可以存储255个字符当我们指定数据表字段为char(n)此列中的数据最长为n位,如果添加的数据少于n,则补0000至长度 |
varchar | 0~65535 | 可变长度字符串,最大长度为35535 |
tinyblob | 0~255字节 | 存储二进制字符串 |
blob | 0~65535字节 | 存储二进制字符串 |
mediumblob | 0~1677215 | 存储二进制字符串 |
longblob | 0~4294967295 | 存储二进制字符串 |
tinytext | 0~255 | 文本数据(字符串) |
text | 0~65535 | 文本数据(字符串) |
mediumtext | 0~65535字节 | 文本数据(字符串) |
longtext | 0~1677215 | 文本数据(字符串) |
日期类型
在MySQL数据库中,我们可以使用字符串来存储时间,但是如果我们需要基于时间字段进行查询操作(查询某个时间段内的数据)就不便于查询实现
类型 | 格式 | 说明 |
date | 2021年9月 | 日期,只存储月日 |
time | 11:12:13 | 时间,只存储时分秒 |
year | 2022 | 年份 |
datetime | 2022/9/13 11:12 | 存储年月日时分秒 |
timestamp | 20220913111213 | ㅤ |
数据库操作
使用DDL语句可以创建数据库
查询数据库
创建数据库
修改数据库
- 修改数据库字符集
删除数据库
- 删除数据库时会删除当前数据库中所有的数据表以及数据表中的数据
使用/切换/进入数据库
数据表操作
创建数据表
数据表实际就是一个二维的表格,一个表格是由多列组成的,表格中的每一类称之为表格的一个字段
查询数据表
查询表结构
删除数据表
修改数据表
数据字段操作
在创建数据表的时候,指定的对数据表的数据限制性的要求(对表中的列中的数据进行限制)
为什么要给表中的列添加约束?
- 保证数据的有效性
- 保证数据的完整性
- 保证数据的正确性
字段常见的约束有哪些?
- 非空约束(not null):限制此列的值必须提供,不能为null
- 唯一约束(unique):在表中的多条数据,此列的值不能重复
- 主键约束(primary key):非空+唯一,能够唯一标识数据表中的一条数据
- 外键约束(foreign key):建立不同表之间的关联关系
非空约束
限制数据表中此列的值必须提供
- 创建表 :设置图书表的 book_name not null
- 添加数据:

唯一约束
在表中的多条数据,同一列的值不能重复
- 创建表:设置图书表book_isbn为unique
- 添加数据:唯一多个数据可以不填,因为没设置不能为空

主键约束
主键: 就是数据表中记录的唯一标识,在一张表中只能有一个主键(可以是一个列,也可以是多个列的组合)
当一个字段声明为主键之后,添加数据时:
- 此字段数据不能为null
- 此字段数据不能重复
创建定义主键
或者
删除数据表主键约束
创建表之后添加主键
主键自动增长
在我们创建数据表时,如果数据表中有列可以作为主键,我们可以让这一列为主键;
当有些数据表中没有合适的列作为主键时,我们可以定义一个与记录本身无关的列(ID)作为主键,此列数据无具体含义,主要用于标识一条记录,在MySQL中我们可以将此列定义为int类型,同事设置为 自动增长 ,当我们向数据表中新增一条记录时,无需提供ID列的值,它会自动生成。
定义主键自动增长
- 定义int类型字段自动增长:
auto_increment
注意:
自动增长从1开始,每添加一条记录,自动的增长的列会自定+1,但是如果我们把某条记录删除之后再添加数据,自动增长的数据也不会重复生成(自动增长只保证唯一性,不保证连续性)
联合主键
联合主键——将表中的多列组合在一起设置为表的主键

定义联合主键
注意:
- 在实际企业项目的数据库设计中,联合主键的使用的频率并不高
- 当一个数据表中没有明确的字段可以作为主键时,我们可以额外添加一个ID字段作为主键
数据操作
插入数据
语法
insert into <tableName>(columnName,columnName...) values(vaule1,value2....);
- columName(字段)
- vaule1(要输入的值)
示例
- 数据表名后的字段名列表顺序可以不与表中一致,但是values中的值顺序必须与表名后字段名顺序对应
- 当要向表中的所有列添加数据时,数据表名后面的字段列表可以省略,但是values中的值的顺序要与数据表定义的字段保持一致
- 不过在项目开发中,即使要向所有列添加数据,也建议将列名的列表显示出来(也就是colunName中的值要打出来)
删除数据
从数据表中删除满足特定条件(所有)的数据
语法
实例
修改数据
对数据表中已存在的数据进行修改
语法
示例
基础查询
where条件查询
在删除、修改及查询的语句后都可以添加where子句(条件),用于筛选满足特定的添加的数据进行删除、修改和查询操作
条件
多条件查询
在where子句中,可以将多个条件通过逻辑运算符{and or not}进行连接,通过多个条件来筛选要操作的数据
like模糊查询
在where子句的条件中,我们可以使用like关键字来实现模糊查询
语法
- 在like关键字后的reg表达式中
- %表示任意多个字符
- _表示任意一个字符
示例
分组查询
分组——就是将数据表中的记录按照指定的类进行分组
语法
select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名 [having 条件]
[order by 排序字段]
- 表示分组后的每组第一条数据、也可以指定列进行分组
- select * from stus group by stu_gender;
- select 后通常显示分组字段和聚合函数(对分组后的数据进行统计、求和、平均值等)
- 语句执行顺序:
- 先根据 where 条件从数据库查询记录
- group by 对查询记录进行分组
- 执行having对分组后的数据进行筛选





对查询结果处理
设置查询的列
声明显示查询结果的指定列
计算列
对从数据表中查询的记录的列进行一定的运算之后显示出来
字段列名
我们可以为查询结果的列名,定义一个语义性更强的别名,如下列案列中 as 关键字也可以省略

消除重复行
从查询的结果中将重复的数据删除

Order by排序
将查询到的满足条件的记录按照指定列的值来升序或者降序排列
语法
- order by columnName 表示将查询结果按照指定的列排序
- asc 按照指定的列升序(默认)
- desc 按照指定的列降序
实例

聚合统计函数
SQL中提供了一些可以对查询的记录的列进行计算的函数——聚合函数
count
- count() 统计函数,统计满足条件的指定字段值的个数7
1.统计学生表中学生总数
2.统计学生表中性别为难的学生总数

max
- max() 计算最大值,查询满足条件的指定列的最大值

min
- min() 计算最小值,查询满足条件的记录中指定列的最小值

sum
- sum() 计算和,查询满足条件的记录中指定的列的值的总和

avg
- avg() 求平均值,查询满足条件的记录中计算指定列的平均值

插入日期
当我们向日期类型列添加数据时,可以通过字符串类型赋值(字符串的格式必须为yyyy-mm-dd hh:mm:ss)
如果我们想要获取当前系统时间添加到日期类型的列,可以使用 now() 或者 sysdate()
示例
实战练习
建议直接用鱼皮的SQL之母,快速上手
- Author:Pass`Miao
- URL:whypass.top/article/19780a1f-83f0-806b-afc3-f72bda25167f
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!