MySQL 命令行基础
本文最后更新于 2025年9月5日 凌晨
1 | |
类型
| 数据类型 | 占用字节 | 有符号范围 | 无符号范围 |
|---|---|---|---|
| 整型 | |||
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
| 小数类型 | |||
| FLOAT(M, D) | 4 | ||
| DOUBLE(M,D) | 8 | ||
| DECIMAL(M,D) | 最多65个数字 | ||
| 字符串类型 | |||
| CHAR(m) | 定义一个长度为m字节的字符串 | ||
| VARCHAR(m) | 定义一个长度可变的字符串 | ||
| 时间类型 | |||
| DATE | 3 | YYYY-MM-DD | 日期 年月日 |
| TIME | 3 | HH:mm:ss | 时间 时分秒 |
| YEAR | 1 | YYYY | 4位数的年份 |
| DATATIME | 8 | YYYY-MM-DD HH:mm:ss | 日期时间结合体 |
| TIMESTAMP | 4 | 数字 | 1970-01-01 00:00:00 开始的秒数 |
完整性约束
- 非空约束
要求一个字段的值不能为空
1 | |
- 唯一约束
要求一个字段,的值不会被重复插入
1 | |
- 主键约束
必须非空,且必须唯一
1 | |
- 检查约束
对某个字段的值进行区间检查
1 | |
基于枚举的属性检查
1 | |
- 外键约束
1 | |
如果 父表中的某一行数据有对应的子数据,那么必须先删除子表中的数据才可以删除父表中的数据
假设删除父表,必须先删除子表。
SQL 分类
- DDL 数据定义语音
1 | |
- DML 数据操作语言
1 | |
- DCL 数据控制语言
1 | |
- DQL 数据查询语言
使用的表结构
1 | |
1 | |
复杂查询
消除笛卡尔积
通过条件匹配,消除多表查询过程中的非必要膨胀数据
内连接
左表中没有的数据在连接查询结果中不会出现
右表中没有的数据在连接查询结果中也不会出现
只有左表和右表中都存在的数据才会显示到连接查询的结果中
1 | |
外连接
左连接/右连接
1 | |
聚合函数
1 | |
GROUP BY
分组聚合
如果没有分组的话。在SELECT子句后面不能同时出现字段和聚合函数
在有分组的情况下,在SELECT子句后面不能出现分组字段之外的字段
1 | |
HAVING
用于过滤分组后的数据
1 | |
处理顺序
1 | |
子查询
1 | |
子查询位置
- WHERE 子句
1 | |
- HAVING 子句
1 | |
- FROM 子句
1 | |
视图
视图可以理解为一个”窗口”,通过这个窗口可以看到底层表中的特定数据。当你查询视图时,MySQL会执行视图定义中的SELECT语句,并返回相应的结果。
主要特点
数据安全性:视图可以隐藏敏感字段,只向用户展示需要的数据列,提供了一层数据访问控制。
查询简化:对于复杂的多表连接查询,可以创建视图来简化操作,用户只需要查询视图即可。逻辑独立性:当底层表结构发生变化时,视图可以保持接口的稳定性,减少对应用程序的影响。创建和使用示例
1 | |
存储过程
存储过程是预编译的SQL语句集合,存储在数据库中可重复调用的程序单元,类似于数据库层面的函数。
性能优势:一次编译多次执行,减少网络开销和解析时间。
安全性:有效防止SQL注入,提供精细的权限控制。
可维护性:业务逻辑集中管理,代码重用性强。
功能丰富:支持参数传递、条件判断、循环控制、异常处理等复杂逻辑。
1 | |
Limit
LIMIT是MySQL用于限制查询结果集行数的关键字,主要用于分页查询和结果集截取。
基本语法
1 | |
使用模式
结果限制:
1 | |
分页查询:
1 | |
性能优化配合:
1 | |
SQL的处理过程
SQL 架构
SQL 通常由 连接层,服务层和存储层组成
连接层: 负责处理TCP连接,客户端通过TCP连接完成对SQL服务的数据查询
服务层: 服务层主要提供的是将用户发送的字符串指令解析为对应的SQL指令,并优化查询过程
存储层: 存储层用于定义数据的存储方式和存储逻辑,并定义相关的读写接口,供服务层调用进行数据查询。

处理过程
