乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • 第1章 数据库基础与安装

    • MySQL 简介
    • MySQL 5.6 到 5.7 到 8.0 关键差异速查
    • 安装 MySQL 5.7
    • 连接与断开服务器
    • 创建数据库
    • 创建数据表
    • 数据库与数据表
    • 加载数据
    • 获取数据库信息
    • 批处理模式
    • SHOW 语句汇总
    • FLUSH 与 RESET 语句
    • my.cnf 核心参数
    • 字符集与排序规则
  • 第2章 SQL基础查询

    • SELECT
    • WHERE
    • ORDER BY
    • LIMIT
    • COUNT
    • 聚合函数
    • 比较运算符
    • 逻辑运算符
    • 算术运算符
    • 模式匹配
    • NULL 值处理
    • UPDATE
    • DELETE
    • REPLACE
    • SELECT INTO
  • 第3章 数据类型与运算符

    • 数值类型
    • 字符串类型
    • 日期时间类型
    • BIT 类型
    • ENUM 类型
    • SET 类型
    • JSON 类型
    • 类型转换
  • 第4章 函数与表达式

    • 字符串函数
    • 数值函数
    • 日期函数
    • 全文检索函数
  • 第5章 高级查询与子查询

    • JOIN
    • 子查询
    • UNION
    • GROUP BY
    • HAVING
    • DISTINCT
  • 第6章 表与索引

    • 数据定义语言
    • 修改表结构
    • 视图
    • 修改视图与检查选项
    • 外键
    • 索引
    • 唯一索引
    • 复合索引
    • 存储引擎对比
    • 分区表
    • 第一范式与第二范式
    • 第三范式与 BC 范式
    • 反范式设计
  • 第7章 存储过程与函数

    • 存储过程
    • 存储函数
    • 变量
    • 流程控制
    • 游标
    • 预处理语句
  • 第8章 事务与锁

    • 事务
    • 事务隔离级别
    • 锁机制
    • MVCC
    • 死锁专题分析
    • LOCK TABLES
    • XA 事务
  • 第9章 用户管理与安全

    • 用户管理
    • 权限管理
    • 角色
    • SQL 注入防范
  • 第10章 性能优化入门

    • 执行计划
    • 索引优化
    • 查询优化
    • 查询优化器提示
    • 慢查询日志
    • InnoDB 深入机制
    • InnoDB 专项优化
    • Performance Schema
    • sys Schema
  • 第11章 复制与高可用

    • 主从复制原理
    • 半同步复制配置
    • binlog 开启与 point-in-time 恢复
    • mysqldump 全库备份
    • mysqldump 单表与条件备份
    • mysqldump 恢复与导入
    • xtrabackup 全量热备
    • xtrabackup 准备与恢复
    • xtrabackup 增量与流式备份
  • 第12章 触发器与事件

    • 触发器
    • 事件调度器
  • 参考

    • MySQL 5.7 专业术语大全
    • MySQL 5.7 关键字与保留字大全

MySQL 5.7 关键字与保留字大全

学习哲学:关键字是 SQL 语言的"词汇表",理解每个关键字的语法角色和使用场景,是写出正确、高效 SQL 的基础。

一、关键字分类总览

MySQL 中的关键字分为两类:

  • 保留字(Reserved Words):具有特殊语法含义,不能直接用做标识符(表名、列名),如 SELECT、FROM、WHERE
  • 非保留字(Non-Reserved Words):虽有特殊含义,但可以用做标识符(不推荐),如 ACTION、ARRAY

注意:即使非保留字,也强烈建议不要用关键字做表名/列名,以免混淆。如果必须用,需用反引号 ` 包裹,如 `SELECT`。

二、数据定义语言(DDL)关键字

2.1 数据库操作

关键字作用示例
CREATE创建数据库对象CREATE DATABASE petshop;
DATABASE指定操作对象是数据库CREATE DATABASE test;
SCHEMA同 DATABASE,可互换CREATE SCHEMA test;
DROP删除数据库对象(⚠️ 危险)DROP DATABASE test;
ALTER修改数据库对象结构ALTER TABLE pet ADD COLUMN color VARCHAR(50);
USE切换当前数据库USE petshop;
SHOW查看数据库信息SHOW DATABASES;
IF EXISTS判断是否存在(用于 DROP)DROP TABLE IF EXISTS temp;
IF NOT EXISTS判断是否不存在(用于 CREATE)CREATE TABLE IF NOT EXISTS pet (...);
CHARACTER SET指定字符集CHARACTER SET utf8mb4;
COLLATE指定排序规则COLLATE utf8mb4_unicode_ci;

2.2 表操作

关键字作用示例
TABLE指定操作对象是表CREATE TABLE pet (...);
COLUMN指定列(可选)ALTER TABLE pet ADD COLUMN weight FLOAT;
INDEX创建索引CREATE INDEX idx_name ON pet(name);
UNIQUE唯一索引/约束UNIQUE KEY uk_email (email)
PRIMARY KEY主键约束PRIMARY KEY (id)
FOREIGN KEY外键约束FOREIGN KEY (owner_id) REFERENCES owner(id)
REFERENCES外键引用的表和列REFERENCES owner(id)
AUTO_INCREMENT自增属性id INT AUTO_INCREMENT PRIMARY KEY
DEFAULT默认值status TINYINT DEFAULT 1
COMMENT注释COMMENT '宠物信息表'
ENGINE指定存储引擎ENGINE=InnoDB
CHARSET简写字符集DEFAULT CHARSET=utf8mb4
DESC / DESCRIBE查看表结构DESC pet;
RENAME重命名RENAME TABLE old TO new;
TRUNCATE清空表TRUNCATE TABLE temp_logs;

三、数据操作语言(DML)关键字

3.1 查询数据(SELECT)

关键字作用示例
SELECT选择列SELECT name, species FROM pet;
FROM指定数据来源表SELECT * FROM pet;
WHERE过滤条件WHERE species = 'dog';
AND逻辑与WHERE species = 'dog' AND sex = 'M';
OR逻辑或WHERE species = 'dog' OR species = 'cat';
NOT逻辑非WHERE NOT species = 'snake';
IN在集合中WHERE species IN ('dog', 'cat');
NOT IN不在集合中WHERE species NOT IN ('snake');
BETWEEN在范围内WHERE birth BETWEEN '2020-01-01' AND '2023-12-31';
LIKE模糊匹配WHERE name LIKE 'Fl%';
IS NULL判断为空WHERE death IS NULL;
IS NOT NULL判断非空WHERE death IS NOT NULL;
ORDER BY排序ORDER BY birth DESC;
ASC升序(默认)ORDER BY name ASC;
DESC降序ORDER BY birth DESC;
LIMIT限制返回行数LIMIT 5; / LIMIT 0, 10;
OFFSET跳过前几行LIMIT 10 OFFSET 20;
DISTINCT去重SELECT DISTINCT species FROM pet;
AS起别名SELECT name AS 宠物名 FROM pet;
ALL全部(默认)SELECT ALL name FROM pet;

3.2 多表查询关键字

关键字作用示例
JOIN表连接SELECT * FROM pet JOIN owner;
INNER JOIN内连接FROM pet INNER JOIN owner ON pet.owner_id = owner.id
LEFT JOIN左外连接FROM pet LEFT JOIN owner ON pet.owner_id = owner.id
RIGHT JOIN右外连接FROM pet RIGHT JOIN owner ON pet.owner_id = owner.id
CROSS JOIN交叉连接FROM pet CROSS JOIN owner
ON连接条件ON pet.owner_id = owner.id
USING同名列连接简写FROM pet JOIN owner USING (owner_id)
UNION合并结果集(去重)SELECT ... UNION SELECT ...
UNION ALL合并结果集(不去重)SELECT ... UNION ALL SELECT ...

3.3 聚合与分组

关键字作用示例
COUNT()计数COUNT(*) / COUNT(name)
SUM()求和SUM(price)
AVG()平均值AVG(age)
MAX()最大值MAX(birth)
MIN()最小值MIN(birth)
GROUP BY分组GROUP BY species;
HAVING分组后过滤HAVING COUNT(*) > 2;
WITH ROLLUP分组汇总小计GROUP BY species WITH ROLLUP;

3.4 插入、更新、删除

关键字作用示例
INSERT插入数据INSERT INTO pet (name, species) VALUES ('Fluffy', 'cat');
INTO指定插入目标INSERT INTO pet ...
VALUES指定值列表VALUES ('Fluffy', 'cat');
UPDATE更新数据UPDATE pet SET name = 'Buddy2' WHERE id = 2;
SET设置新值SET name = 'Buddy2'
DELETE删除数据DELETE FROM pet WHERE id = 2;
REPLACE替换插入REPLACE INTO pet (id, name) VALUES (1, 'New');

四、事务控制关键字

关键字作用示例
START TRANSACTION开始事务START TRANSACTION;
BEGIN同 START TRANSACTIONBEGIN;
COMMIT提交事务COMMIT;
ROLLBACK回滚事务ROLLBACK;
SAVEPOINT设置保存点SAVEPOINT sp1;
ROLLBACK TO回滚到保存点ROLLBACK TO sp1;
RELEASE SAVEPOINT释放保存点RELEASE SAVEPOINT sp1;
SET autocommit设置自动提交SET autocommit = 0;

五、常用函数关键字

5.1 字符串函数

函数作用示例
CONCAT()字符串拼接CONCAT(first_name, ' ', last_name)
LENGTH()返回字节长度LENGTH('中文') → 6(utf8mb4 下)
CHAR_LENGTH()返回字符数CHAR_LENGTH('中文') → 2
SUBSTRING()截取子串SUBSTRING('Hello', 1, 3) → 'Hel'
REPLACE()替换子串REPLACE('Hello', 'l', 'x') → 'Hexxo'
UPPER() / LOWER()大小写转换UPPER('hello') → 'HELLO'
TRIM()去除两端空格TRIM(' hello ') → 'hello'
LEFT() / RIGHT()从左/右截取LEFT('hello', 3) → 'hel'
LOCATE()查找子串位置LOCATE('l', 'hello') → 3
FORMAT()格式化数字FORMAT(1234567.89, 2) → '1,234,567.89'

5.2 数值函数

函数作用示例
ROUND()四舍五入ROUND(3.14159, 2) → 3.14
CEILING() / FLOOR()向上/向下取整CEILING(3.2) → 4
ABS()绝对值ABS(-10) → 10
MOD()取模MOD(10, 3) → 1
RAND()随机数RAND() → 0~1 之间
POW() / POWER()幂运算POW(2, 3) → 8
SQRT()平方根SQRT(16) → 4

5.3 日期时间函数

函数作用示例
NOW()当前日期时间2026-06-10 14:30:00
CURDATE()当前日期2026-06-10
CURTIME()当前时间14:30:00
DATE()提取日期部分DATE('2026-06-10 14:30:00') → '2026-06-10'
YEAR() / MONTH() / DAY()提取年/月/日YEAR(NOW()) → 2026
DATEDIFF()日期相差天数DATEDIFF('2026-06-10', '2026-01-01')
DATE_ADD()日期加减DATE_ADD(NOW(), INTERVAL 7 DAY)
DATE_FORMAT()格式化日期DATE_FORMAT(NOW(), '%Y-%m-%d')
UNIX_TIMESTAMP()转时间戳UNIX_TIMESTAMP(NOW())
FROM_UNIXTIME()时间戳转日期FROM_UNIXTIME(1717998600)

5.4 条件与流程函数

函数作用示例
IF()条件判断IF(sex='M', '雄', '雌')
IFNULL()NULL 替换IFNULL(death, '在世')
NULLIF()相等返回 NULLNULLIF(score, 0)
CASE WHEN多分支条件CASE WHEN age < 1 THEN '幼年' ELSE '成年' END
COALESCE()返回第一个非 NULLCOALESCE(nickname, name, '未知')

六、权限与安全关键字

关键字作用示例
GRANT授予权限GRANT SELECT ON petshop.* TO 'user'@'localhost';
REVOKE收回权限REVOKE INSERT ON petshop.* FROM 'user'@'localhost';
PRIVILEGES所有权限GRANT ALL PRIVILEGES ON *.* TO ...
IDENTIFIED BY设置密码IDENTIFIED BY 'password';
WITH GRANT OPTION允许转授权限GRANT SELECT ON *.* TO user WITH GRANT OPTION;
FLUSH PRIVILEGES刷新权限FLUSH PRIVILEGES;

七、其他重要关键字

关键字作用示例
EXPLAIN分析执行计划EXPLAIN SELECT * FROM pet WHERE id = 1;
DESCRIBE / DESC查看表结构DESC pet;
SHOW查看信息SHOW TABLES; / SHOW INDEX FROM pet;
LIKE(SHOW 中)模糊匹配对象名SHOW TABLES LIKE 'user%';
WHERE(SHOW 中)过滤 SHOW 结果SHOW COLUMNS FROM pet WHERE Type = 'varchar';
LIMIT限制结果数量SELECT * FROM pet LIMIT 10;
OFFSET跳过行数SELECT * FROM pet LIMIT 10 OFFSET 20;
SQL_CALC_FOUND_ROWS计算总行数(配合 FOUND_ROWS())SELECT SQL_CALC_FOUND_ROWS * FROM pet LIMIT 10;
FOUND_ROWS()获取上条 SQL 的总行数SELECT FOUND_ROWS();
LAST_INSERT_ID()获取最后自增 IDSELECT LAST_INSERT_ID();
CONNECTION_ID()获取当前连接 IDSELECT CONNECTION_ID();
DATABASE()获取当前数据库名SELECT DATABASE();
USER()获取当前用户SELECT USER();
VERSION()获取 MySQL 版本SELECT VERSION();

八、关键字速查索引

8.1 按功能分类速查

【数据定义】
CREATE, DROP, ALTER, RENAME, TRUNCATE
DATABASE, SCHEMA, TABLE, COLUMN, INDEX, VIEW
PRIMARY KEY, FOREIGN KEY, UNIQUE, REFERENCES
AUTO_INCREMENT, DEFAULT, COMMENT, ENGINE, CHARSET

【数据查询】
SELECT, FROM, WHERE, DISTINCT, ALL
AND, OR, NOT, IN, NOT IN, BETWEEN, LIKE, IS NULL, IS NOT NULL
ORDER BY, ASC, DESC, LIMIT, OFFSET
GROUP BY, HAVING, WITH ROLLUP

【表连接】
JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN
ON, USING, UNION, UNION ALL

【数据操作】
INSERT, INTO, VALUES, UPDATE, SET, DELETE, REPLACE

【事务控制】
START TRANSACTION, BEGIN, COMMIT, ROLLBACK
SAVEPOINT, ROLLBACK TO, RELEASE SAVEPOINT

【权限控制】
GRANT, REVOKE, PRIVILEGES, IDENTIFIED BY, FLUSH PRIVILEGES

8.2 面试高频关键字考点

  • [ ] WHERE 和 HAVING 的区别?
  • [ ] INNER JOIN、LEFT JOIN、RIGHT JOIN 的结果集差异?
  • [ ] UNION 和 UNION ALL 的区别?
  • [ ] COUNT(*) 和 COUNT(列名) 的区别?
  • [ ] IS NULL 为什么不等于 = NULL?
  • [ ] LIKE '%xxx' 和 LIKE 'xxx%' 哪个能走索引?
  • [ ] AUTO_INCREMENT 有什么特性?删除后 ID 会复用吗?
  • [ ] TRUNCATE 和 DELETE 的区别?
  • [ ] EXPLAIN 输出中 type 列的常见值及含义?

九、课后巩固

  1. 写出查询 pet 表中所有不同物种(species)的 SQL。
  2. 写出将 pet 表中所有 sex='M' 的宠物名字改为大写的 SQL。
  3. 写出查询每个物种(species)的宠物数量,并按数量降序排列的 SQL。
  4. 写出查询第 3 页数据(每页 10 条)的 SQL。
  5. WHERE 子句中能否使用聚合函数?如果不能,应该用什么?
  6. 解释 IFNULL(death, '在世') 的作用。
  7. EXPLAIN 命令的作用是什么?
上一页
MySQL 5.7 专业术语大全