在 MySQL 中,SQL(结构化查询语言)被用来执行对数据库的各种操作。根据功能的不同,SQL 操作可以分为四类:DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)和 DQL(数据查询语言)。下面详细介绍这四种操作类型:


1. DDL (数据定义语言)

DDL 用于定义数据库中的数据结构,如数据库、表、索引、视图等。常见的 DDL 命令包括:

  • CREATE:用于创建数据库或表。
  • ALTER:用于修改已有的数据库对象(如表)。
  • DROP:用于删除数据库或表。
  • TRUNCATE:用于删除表中的所有数据,但不删除表结构。
  • RENAME:用于重命名数据库或表。

示例:

  • CREATE DATABASE: 创建数据库CREATE DATABASE my_database;
  • CREATE TABLE: 创建表CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, position VARCHAR(100), salary DECIMAL(10, 2) );
  • ALTER TABLE: 修改表结构ALTER TABLE employees ADD COLUMN hire_date DATE; ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12, 2);
  • DROP TABLE: 删除表DROP TABLE employees;
  • TRUNCATE TABLE: 清空表数据TRUNCATE TABLE employees;

2. DML (数据操作语言)

DML 用于操作数据库中的数据。常见的 DML 命令包括:

  • INSERT:向表中插入数据。
  • UPDATE:更新表中的数据。
  • DELETE:删除表中的数据。
  • MERGE:将数据从一个表合并到另一个表(通常在 SQL Server 中使用,MySQL 中没有直接的 MERGE 命令,通常通过 INSERT ... ON DUPLICATE KEY UPDATE 或 REPLACE INTO 来实现)。

示例:

  • INSERT INTO: 向表插入数据INSERT INTO employees (name, position, salary, hire_date) VALUES ('John Doe', 'Manager', 60000, '2023-01-01');
  • UPDATE: 更新表中的数据UPDATE employees SET salary = 65000 WHERE name = 'John Doe';
  • DELETE: 删除表中的数据DELETE FROM employees WHERE name = 'John Doe';
  • INSERT … ON DUPLICATE KEY UPDATE: 插入数据或在已有记录时更新数据INSERT INTO employees (id, name, position, salary) VALUES (1, 'Jane Smith', 'Developer', 50000) ON DUPLICATE KEY UPDATE salary = 55000;

3. DCL (数据控制语言)

DCL 用于定义数据库的访问权限和控制。常见的 DCL 命令包括:

  • GRANT:授予用户权限。
  • REVOKE:撤销用户权限。

示例:

  • GRANT:授予权限GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
  • REVOKE:撤销权限REVOKE ALL PRIVILEGES ON my_database.* FROM 'username'@'localhost';
  • SHOW GRANTS:查看某个用户的权限SHOW GRANTS FOR 'username'@'localhost';

4. DQL (数据查询语言)

DQL 主要用于查询数据库中的数据。最常见的 DQL 命令是 SELECT,用于从数据库中检索数据。

示例:

  • SELECT: 查询数据SELECT * FROM employees;
  • SELECT with WHERE: 使用条件查询数据SELECT * FROM employees WHERE salary > 50000;
  • SELECT with JOIN: 使用连接查询数据SELECT employees.name, departments.name FROM employees JOIN departments ON employees.department_id = departments.id;
  • SELECT with GROUP BY: 使用分组查询数据SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id;
  • SELECT with ORDER BY: 排序查询结果SELECT * FROM employees ORDER BY salary DESC;
  • SELECT with LIMIT: 限制查询返回的结果数量SELECT * FROM employees LIMIT 10;

总结

类型操作示例
DDL数据定义语言,定义数据库对象(如数据库、表)CREATEALTERDROP
DML数据操作语言,操作数据(如插入、更新、删除)INSERTUPDATEDELETE
DCL数据控制语言,控制用户权限GRANTREVOKE
DQL数据查询语言,查询数据SELECT

这四种 SQL 操作覆盖了从数据定义、数据操作到数据控制和查询的方方面面,是数据库管理和操作的核心。通过掌握这些操作,可以高效地进行数据库设计和管理。