MySQL 关键字总结,并结合 SQL 类型(DDL / DML / DQL / DCL / TCL) 说明每类关键字的作用、使用场景和示例

目录

[1. SQL 类型与关键字分类总览](#1. SQL 类型与关键字分类总览)

[2. 各类关键字详解](#2. 各类关键字详解)

[2.1 DDL(数据定义语言)](#2.1 DDL(数据定义语言))

[2.2 DML(数据操作语言)](#2.2 DML(数据操作语言))

[2.3 DQL(数据查询语言)](#2.3 DQL(数据查询语言))

[2.4 DCL(数据控制语言)](#2.4 DCL(数据控制语言))

[2.5 TCL(事务控制语言)](#2.5 TCL(事务控制语言))

[3. 注意事项与最佳实践](#3. 注意事项与最佳实践)

[4、MySQL 中的关键字 & 保留字(Reserved Keywords)](#4、MySQL 中的关键字 & 保留字(Reserved Keywords))

[5、UNSIGNED / SIGNED / ZEROFILL 等关键字详解与使用场景](#5、UNSIGNED / SIGNED / ZEROFILL 等关键字详解与使用场景)

UNSIGNED

ZEROFILL

SIGNED

[6、根据 SQL 类型看关键字使用场景区别](#6、根据 SQL 类型看关键字使用场景区别)

1. SQL 类型与关键字分类总览

SQL 类型 主要作用 常用关键字
DDL(数据定义语言) 定义/修改数据库结构 CREATE, DROP, ALTER, RENAME, TRUNCATE
DML(数据操作语言) 对数据进行增删改 INSERT, UPDATE, DELETE, REPLACE
DQL(数据查询语言) 查询数据 SELECT, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, DISTINCT, JOIN
DCL(数据控制语言) 控制用户权限 GRANT, REVOKE
TCL(事务控制语言) 控制事务提交和回滚 COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION

2. 各类关键字详解

2.1 DDL(数据定义语言)

用于定义或更改数据库结构(表、列、索引等)。

关键字 作用 使用场景 示例
CREATE 创建数据库/表/索引等 新建表结构 CREATE TABLE users (id INT, name VARCHAR(50));
DROP 删除数据库/表/视图等 永久删除结构 DROP TABLE users;
ALTER 修改表结构 添加列、修改列类型、删除列 ALTER TABLE users ADD email VARCHAR(100);
RENAME 修改表/数据库名称 更改命名 RENAME TABLE users TO members;
TRUNCATE 清空表数据(不记录日志) 重置数据表 TRUNCATE TABLE users;

2.2 DML(数据操作语言)

用于对表中的数据进行增加、修改和删除。

关键字 作用 使用场景 示例
INSERT 插入数据 添加新记录 INSERT INTO users (name, email) VALUES ('Tom', 'tom@a.com');
UPDATE 更新数据 修改已存在记录 UPDATE users SET email='new@a.com' WHERE id=1;
DELETE 删除数据 删除记录 DELETE FROM users WHERE id=1;
REPLACE 插入数据(如果主键存在则替换) 主键冲突自动替换 REPLACE INTO users (id, name) VALUES (1, 'Jerry');

2.3 DQL(数据查询语言)

用于从数据库中查询数据,是使用最频繁的部分。

关键字 作用 使用场景 示例
SELECT 查询数据 获取表数据 SELECT * FROM users;
DISTINCT 去重 去掉重复记录 SELECT DISTINCT name FROM users;
WHERE 条件过滤 筛选数据 SELECT * FROM users WHERE age > 18;
GROUP BY 分组 统计数据 SELECT age, COUNT(*) FROM users GROUP BY age;
HAVING 分组后条件过滤 筛选聚合结果 SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 2;
ORDER BY 排序 按指定顺序排序 SELECT * FROM users ORDER BY age DESC;
LIMIT 限制结果数量 分页 SELECT * FROM users LIMIT 10 OFFSET 20;
JOIN 连接表 多表查询 SELECT * FROM users JOIN orders ON users.id=orders.user_id;

2.4 DCL(数据控制语言)

用于权限管理。

关键字 作用 使用场景 示例
GRANT 授权 给用户赋权限 GRANT SELECT, INSERT ON mydb.* TO 'user1'@'localhost';
REVOKE 撤销权限 收回用户权限 REVOKE INSERT ON mydb.* FROM 'user1'@'localhost';

2.5 TCL(事务控制语言)

用于事务操作,保证数据一致性。

关键字 作用 使用场景 示例
START TRANSACTION 开始事务 批量操作前开启事务 START TRANSACTION;
COMMIT 提交事务 确认保存更改 COMMIT;
ROLLBACK 回滚事务 撤销操作 ROLLBACK;
SAVEPOINT 设置保存点 局部回滚 SAVEPOINT sp1;
SET TRANSACTION 设置事务隔离级别 改变事务行为 SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

3. 注意事项与最佳实践

  1. 关键字区分场景

    • SELECT 永远不会直接修改数据(查询型)

    • INSERT / UPDATE / DELETE 会改数据(要注意事务)

    • CREATE / DROP / ALTER 会改结构(不可逆)

  2. 命名避免关键字冲突

    如果列名叫 orderdesc 这种关键字,需用反引号包裹:

    sql 复制代码
    SELECT `order` FROM orders;
  3. 大小写规范

    • 关键字 建议全大写(便于和字段区分)

    • 表名、字段名建议小写(跨平台兼容)

  4. 事务管理

    • 查询用 DQL,不需要事务

    • DML 建议放事务中,避免数据不一致

  5. 性能优化

    • WHERE 前加索引列

    • 避免 SELECT *,改为指定列名

4、MySQL 中的关键字 & 保留字(Reserved Keywords)

MySQL 的关键字在语法中具有特殊意义,其中一些是保留字(Reserved),使用它们作为表名或列名时需加反引号(``)引用。下面是部分版本示例:

MySQL 官方还提供了 INFORMATION_SCHEMA.KEYWORDS 系统表,用于查看当前版本所有关键字及其保留状态 MySQL开发者专区


5、UNSIGNED / SIGNED / ZEROFILL 等关键字详解与使用场景

UNSIGNED

  • 作用 :用于数值类型(如 INT / BIGINT)时,移除负值范围,只允许 ≥0 值,并显著提升最大可存储值范围。例如 INT 原范围 -2.1B ~ 2.1B,变为 0 ~ 4.2B Stack OverflowPlanetScale

  • 应用场景 :适用于主键 ID、计数值等绝不会出现负数的字段。如使用自动自增的 INT,若不需要负数,推荐加 UNSIGNED,以扩展正值范围 Devart Blog

  • 注意 :从 MySQL 8.4 起,对于浮点 (FLOAT / DOUBLE / DECIMAL),UNSIGNED 已被标记为废弃,建议改用 CHECK 约束 MySQL开发者专区

ZEROFILL

  • 作用 :在数值展示时左侧自动补零。例如 INT(5) ZEROFILL,插入 42,会显示为 00042。一般与 UNSIGNED 联用。

  • 应用场景:适用于固定位数展示要求,如订单号、序列号等视觉格式统一场景。

  • 注意ZEROFILL 也列为保留关键字,使用时需注意语法兼容与版本支持情况。

SIGNED

  • 默认数值类型若未标明,就是有符号(SIGNED)。显式写 SIGNED 无实际作用,但可作为提醒或与 UNSIGNED 对比使用。

6、根据 SQL 类型看关键字使用场景区别

下面是关键字在不同 SQL 类型中的主要用途对照:

SQL 类型 关键字示例 用途或注意事项
DDL UNSIGNED, ZEROFILL, CREATE, ALTER, DROP 定义字段属性(如UNSIGNED 修饰数据类型),以及表结构操作。需注意保留关键字。
DML 无专用关键字 修改数据时无需用这些类型修饰关键字。
DQL 无专用关键字 查询时通常不使用这些字段属性关键字。
DCL / TCL 无关关键字 权限和事务操作与这些关键字无关联。

简言之,像 UNSIGNED / ZEROFILL 这类关键字主要在 DDL 定义阶段 使用,用来描述列数据类型行为,与数据插入/查询无关。