Skip to content

MySQL - 语句参考

本指南提供了关键 MySQL 语句的全面参考,并进行了清晰的分类。每个类别都解释了其用途,随后列出了关键语句及其现代用法。本参考侧重于 MySQL 8.0 及更高版本的实践。

DDL 语句用于定义、修改和删除数据库结构,例如表、索引和视图。这些操作通常是永久性的且自动提交。

  • CREATE DATABASE: 创建新的数据库模式。
  • ALTER DATABASE: 修改数据库的全局特性,例如其默认字符集和排序规则。
  • DROP DATABASE: 永久删除整个数据库,包括其所有表和数据。请务必谨慎使用。
  • CREATE TABLE: 定义新表及其列、数据类型和约束(例如 PRIMARY KEY、FOREIGN KEY、NOT NULL、UNIQUE)。
  • ALTER TABLE: 修改现有表结构。常见用途包括添加、删除或修改列、添加约束或重命名表。
  • DROP TABLE: 永久删除表及其所有数据。
  • TRUNCATE TABLE: 快速删除表中的所有行。对于大型表,它比 DELETE 更快,并且会重置任何 AUTO_INCREMENT 计数器。这是一个 DDL 操作,无法轻松回滚。
  • CREATE INDEX: 在一个或多个列上创建索引以提高查询性能。
  • DROP INDEX: 从表中删除索引。
  • CREATE VIEW: 基于 SQL 语句的结果集创建虚拟表。
  • ALTER VIEW: 修改现有视图的定义。
  • DROP VIEW: 删除视图。

DML 语句用于管理模式对象中的数据。这些是应用程序开发人员最常见的 SQL 操作。

  • SELECT: 从一个或多个表中检索数据。数据查询的基石。
  • INSERT: 向表中添加新行数据。
  • UPDATE: 修改表中的现有数据。
  • DELETE: 从表中删除行。
  • CALL: 执行存储过程。
  • LOAD DATA INFILE: 一个高性能命令,用于将数据从文本文件批量加载到表中。
  • WITH (通用表表达式 - CTEs): 创建一个临时命名结果集,您可以在 SELECT、INSERT、UPDATE 或 DELETE 语句中引用它。对于分解复杂查询至关重要。
  • VALUES: 生成一行或一组行。可与 INSERT 配合用于多行插入,或作为独立语句使用。

TCL 语句用于管理事务,通过将一组操作分组为单个逻辑单元来确保数据完整性。这些是 ACID 合规性的基础。

  • START TRANSACTION: 开始一个新的事务块。
  • COMMIT: 保存当前事务期间所做的所有更改,使它们永久生效。
  • ROLLBACK: 放弃当前事务期间所做的所有更改,将数据库恢复到事务开始前的状态。
  • SAVEPOINT: 在事务中设置一个命名标记,您以后可以回滚到该标记。
  • ROLLBACK TO SAVEPOINT: 将事务回滚到特定的保存点,而不会中止整个事务。
  • RELEASE SAVEPOINT: 删除一个命名的保存点。
  • SET TRANSACTION: 设置当前事务的特性,例如隔离级别。

DCL 语句用于管理数据库中的用户访问和权限。

  • CREATE USER: 创建用于访问服务器的新用户账户。
  • ALTER USER: 修改现有用户账户,通常用于更改密码或身份验证设置。
  • DROP USER: 删除用户账户。
  • GRANT: 授予用户或角色对数据库对象的特定权限(例如 SELECT、INSERT)。
  • REVOKE: 撤销之前授予用户或角色的权限。
  • CREATE ROLE / DROP ROLE: 管理角色,角色是命名权限的集合,可简化权限管理。
  • SET ROLE: 激活当前会话的角色。

这些语句用于存储过程、函数和触发器中,以在数据库服务器上实现过程逻辑。

  • CREATE PROCEDURE / FUNCTION / TRIGGER / EVENT: 定义封装业务逻辑的存储程序。
  • ALTER PROCEDURE / FUNCTION …: 修改存储程序的特性。
  • DROP PROCEDURE / FUNCTION …: 删除存储程序。
  • DECLARE: 在存储程序块内声明局部变量、游标或条件。
  • SET: 为变量赋值。
  • IF … THEN … ELSEIF … ELSE … END IF: 条件语句执行。
  • CASE: 一种更复杂的条件语句,类似于其他语言中的 switch 语句。
  • LOOP, WHILE, REPEAT: 用于创建循环以迭代代码块的语句。
  • LEAVE: 退出带标签的循环或程序块。
  • ITERATE: 跳过当前循环迭代的其余部分并开始下一次迭代。
  • CURSOR (DECLARE, OPEN, FETCH, CLOSE): 逐行遍历结果集的机制。

这些语句用于服务器维护、诊断和信息检索。

  • SHOW [DATABASES, TABLES, COLUMNS, STATUS, VARIABLES, PROCESSLIST]: 显示有关服务器、数据库、表和当前操作的信息。
  • DESCRIBE / EXPLAIN: DESCRIBE(或 DESC)显示表的结构。EXPLAIN 提供查询执行计划,这对于性能调优至关重要。
  • ANALYZE TABLE / OPTIMIZE TABLE: 维护命令,用于更新索引统计信息和回收未使用的空间。
  • FLUSH: 清除各种内部缓存(例如 FLUSH PRIVILEGES, FLUSH TABLES)。注意:现代 DCL 语句通常使得 FLUSH PRIVILEGES 变得不必要。
  • KILL: 终止特定的连接线程/进程。
  • USE: 设置当前会话中后续查询的默认数据库。