MySQL 中的关键字是数据库中具有特殊含义的保留字,它们用于定义数据库结构、操作数据库数据和控制数据库行为。关键字在 MySQL 查询中扮演着至关重要的角色,因为它们是 SQL 语句的核心组成部分。
1. 数据定义语言 (DDL) 关键字
数据定义语言 (DDL) 关键字用于定义、修改和删除数据库结构,如数据库、表和索引等。这些关键字通常用于创建、删除表结构以及修改表的列等操作。
1.1 CREATE
CREATE
关键字用于创建数据库对象,比如数据库、表、索引等。
-
创建数据库:
sqlCREATE DATABASE my_database;
-
创建表:
sqlCREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), salary DECIMAL(10, 2) );
-
创建索引:
sqlCREATE INDEX idx_name ON employees(name);
1.2 ALTER
ALTER
关键字用于修改已存在的数据库对象,比如表的结构(添加或删除列、修改列类型等)。
-
添加新列:
sqlALTER TABLE employees ADD birth_date DATE;
-
修改列的数据类型:
sqlALTER TABLE employees MODIFY salary DECIMAL(12, 2);
-
删除列:
sqlALTER TABLE employees DROP COLUMN birth_date;
1.3 DROP
DROP
关键字用于删除数据库对象,如表、数据库或索引。删除操作是不可逆的,因此要谨慎使用。
-
删除数据库:
sqlDROP DATABASE my_database;
-
删除表:
sqlDROP TABLE employees;
-
删除索引:
sqlDROP INDEX idx_name ON employees;
1.4 RENAME
RENAME
关键字用于重命名数据库对象,比如重命名表。
-
重命名表:
sqlRENAME TABLE employees TO staff;
2. 数据操作语言 (DML) 关键字
数据操作语言 (DML) 关键字用于查询、插入、更新和删除表中的数据,是数据库操作中最为频繁使用的部分。
2.1 SELECT
SELECT
关键字用于从数据库中查询数据,是最常用的关键字之一。
-
基本查询:
sqlSELECT * FROM employees;
-
查询指定列:
sqlSELECT name, salary FROM employees;
-
使用条件查询:
sqlSELECT * FROM employees WHERE salary > 5000;
2.2 INSERT
INSERT
关键字用于向表中插入新数据。
-
插入一条记录:
sqlINSERT INTO employees (name, salary) VALUES ('John Doe', 7500);
-
插入多条记录:
sqlINSERT INTO employees (name, salary) VALUES ('Alice', 6000), ('Bob', 5500);
2.3 UPDATE
UPDATE
关键字用于更新表中的数据。
-
更新单条记录:
sqlUPDATE employees SET salary = 8000 WHERE id = 1;
-
更新多条记录:
sqlUPDATE employees SET salary = salary * 1.1 WHERE salary < 6000;
2.4 DELETE
DELETE
关键字用于删除表中的数据。
-
删除一条记录:
sqlDELETE FROM employees WHERE id = 1;
-
删除所有记录:
sqlDELETE FROM employees;
2.5 REPLACE
REPLACE
关键字类似于 INSERT
,但如果插入的记录主键冲突,会先删除原有记录,再插入新记录。
-
插入新记录或替换已有记录:
sqlREPLACE INTO employees (id, name, salary) VALUES (1, 'John Doe', 8000);
3. 数据控制语言 (DCL) 关键字
数据控制语言 (DCL) 关键字用于控制数据库的访问权限,确保数据库的安全性和数据的保密性。
3.1 GRANT
GRANT
关键字用于向用户授予权限。
-
授予用户查询权限:
sqlGRANT SELECT ON my_database.* TO 'username'@'localhost';
-
授予用户所有权限:
sqlGRANT ALL PRIVILEGES ON my_database.* TO 'username'@'localhost';
3.2 REVOKE
REVOKE
关键字用于撤销用户的权限。
-
撤销查询权限:
sqlREVOKE SELECT ON my_database.* FROM 'username'@'localhost';
-
撤销所有权限:
sqlREVOKE ALL PRIVILEGES ON my_database.* FROM 'username'@'localhost';
4. 事务控制语言 (TCL) 关键字
事务控制语言 (TCL) 关键字用于管理数据库事务,确保数据操作的原子性和一致性。事务可以确保一组操作要么全部成功,要么全部回滚。
4.1 BEGIN
/ START TRANSACTION
BEGIN
或 START TRANSACTION
用于显式开启一个事务。
-
开启事务:
sqlSTART TRANSACTION;
4.2 COMMIT
COMMIT
用于提交当前事务,使事务中的所有操作生效。
-
提交事务:
sqlCOMMIT;
4.3 ROLLBACK
ROLLBACK
用于回滚当前事务,撤销事务中的所有操作。
-
回滚事务:
sqlROLLBACK;
4.4 SAVEPOINT
SAVEPOINT
允许在事务中设置保存点,以便部分回滚。
-
设置保存点:
sqlSAVEPOINT sp1;
-
回滚到保存点:
sqlROLLBACK TO SAVEPOINT sp1;
4.5 RELEASE SAVEPOINT
RELEASE SAVEPOINT
用于删除指定的保存点。
-
删除保存点:
sqlRELEASE SAVEPOINT sp1;
5. 查询控制关键字
在 MySQL 中,还有一些关键字用于控制查询的执行方式和输出结果。
5.1 DISTINCT
DISTINCT
用于去除查询结果中的重复记录。
-
查询不重复的员工姓名:
sqlSELECT DISTINCT name FROM employees;
5.2 ORDER BY
ORDER BY
用于对查询结果进行排序,可以按升序 (ASC
) 或降序 (DESC
) 排序。
-
按工资升序排序:
sqlSELECT * FROM employees ORDER BY salary ASC;
-
按姓名降序排序:
sqlSELECT * FROM employees ORDER BY name DESC;
5.3 GROUP BY
GROUP BY
用于将查询结果按某一列进行分组,常与聚合函数一起使用。
-
按部门分组并计算每个部门的平均工资:
sqlSELECT department, AVG(salary) FROM employees GROUP BY department;
5.4 HAVING
HAVING
类似于 WHERE
,但它用于过滤聚合结果。
-
过滤出平均工资大于5000的部门:
sqlSELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;
5.5 LIMIT
LIMIT
用于限制查询返回的记录数。
-
返回前 5 条记录:
sqlSELECT * FROM employees LIMIT 5;
-
返回第 3 条到第 7 条记录:
sqlSELECT * FROM employees LIMIT 2, 5;
5.6 UNION
UNION
用于将多个查询结果合并成一个结果集,同时去除重复记录。
-
合并两个查询结果:
sqlSELECT name FROM employees WHERE salary > 5000 UNION SELECT name FROM managers;
6. 常用条件关键字
6.1 WHERE
WHERE
用于指定查询的条件。
-
查询工资大于5000的员工:
sqlSELECT * FROM employees WHERE salary > 5000;
6.2 AND
/ OR
AND
和 OR
用于组合多个查询条件。
-
查询工资大于5000且在 IT 部门的员工:
sqlSELECT * FROM employees WHERE salary > 5000 AND department = 'IT';
-
查询工资大于5000或在 IT 部门的员工:
sqlSELECT * FROM employees WHERE salary > 5000 OR department = 'IT';
6.3 IN
IN
用于指定多个值,类似于多个 OR
的组合。
-
查询在 IT 或 HR 部门的员工:
sqlSELECT * FROM employees WHERE department IN ('IT', 'HR');
6.4 BETWEEN
BETWEEN
用于指定范围条件。
-
查询工资在 3000 到 6000 之间的员工:
sqlSELECT * FROM employees WHERE salary BETWEEN 3000 AND 6000;
6.5 LIKE
LIKE
用于模糊匹配,常与通配符 %
(匹配任意多个字符)和 _
(匹配一个字符)配合使用。
-
查询姓名以 "J" 开头的员工:
sqlSELECT * FROM employees WHERE name LIKE 'J%';
结论
MySQL 中的关键字定义了数据库操作的规则和行为,它们使得开发者能够高效地操作和管理数据。关键字分为多个类别,包括数据定义语言 (DDL)、数据操作语言 (DML)、数据控制语言 (DCL)、事务控制语言 (TCL) 和查询控制关键字等。理解并熟练使用这些关键字是 MySQL 数据库开发和操作的重要基础,通过合理应用它们可以提高数据管理的效率和准确性。