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

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

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 这种关键字,需用反引号包裹:

    SELECT `order` FROM orders;
    
  3. 大小写规范

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

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

  4. 事务管理

    • 查询用 DQL,不需要事务

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

  5. 性能优化

    • WHERE 前加索引列

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

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

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

  • MySQL 8.0 中,UNSIGNEDZEROFILL 等都被标记为保留(Reserved)关键字 MySQL开发者专区Oracle Docs。

  • UNSIGNED 在多个版本中都是保留字,包括 5.7、9.0 版本 MySQL开发者专区+1。

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

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

http://www.xdnf.cn/news/18013.html

相关文章:

  • Pr cs6安装教程
  • 标题:移动端安全加固:发散创新,筑牢安全防线引言:随着移动互联网
  • 【多模态大模型】--BLIP3
  • 集成电路学习:什么是Object Detection目标检测
  • Apache 如何支持SHTML(SSI)的配置方法
  • DAY41打卡
  • 高等数学 8.3 平面及其方程
  • 力扣top100(day04-04)--栈
  • 结构体(Struct)、枚举(Enum)的使用
  • MySQL的学习笔记
  • 基于Spring Boot的智能民宿预订与游玩系统设计与实现 民宿管理系统 民宿预订系统 民宿订房系统
  • Fiddler 实用指南,让网络调试更直观、更高效
  • 【秋招笔试】2025.08.15饿了么秋招机考-第三题
  • 4.3 computed watch watchEffect
  • 日本CN2服务器租用多少钱
  • sqli-labs通关笔记-第50关 GET数值型order by堆叠注入(手工注入+脚本注入两种方法)
  • Redis 缓存和 Redis 分布式锁
  • Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
  • 嵌入式硬件篇---电容滤波
  • Python Sqlalchemy数据库连接
  • 华测科技的3D GPR数据分析
  • 无线也要“自主可控”——东土科技WLAN方案
  • C语言+安全函数+非安全函数
  • imx6ull-驱动开发篇26——Linux 中断实验
  • Pytest 插件使用指南:让你的测试更高效
  • GitHub的使用教程
  • WordPress 7B2主题,在使用PHP 8.0+出现502的解决办法。
  • php危险函数,二.assert()[现版本已弃用]
  • 第十六届蓝桥杯青少组C++省赛[2025.8.9]第二部分编程题(4、矩阵圈层交错旋转)
  • MyBatis 动态数据源切换在 Spring Boot 环境下的实现方案