复制代码
### 结构化查询语言SQL(exit退出mysql)
*
#### 数据定义语言ddl
*
```sql
-- 数据定义语言(DDL)命令
-- 1. 创建数据库
CREATE DATABASE database_name; -- 创建一个名为 database_name 的新数据库
-- 用于创建一个新的数据库,包含数据表和其他数据库对象。
-- 2. 删除数据库
DROP DATABASE database_name; -- 删除名为 database_name 的数据库
-- 用于永久删除指定的数据库及其所有内容,操作不可逆。
-- 3. 使用数据库
USE database_name; -- 选择并使用指定的数据库
-- 在执行后续命令时,指定要操作的数据库,确保所有操作在该数据库中进行。
-- 4.创建表命令
CREATE TABLE table_name ( -- 创建一个名为 table_name 的新表
column1 datatype [constraints], -- 定义第一列的名称、数据类型及可选约束
column2 datatype [constraints], -- 定义第二列的名称、数据类型及可选约束
... -- 可以添加更多列
PRIMARY KEY (column_name), -- 指定主键,唯一标识表中的每一行
FOREIGN KEY (column_name) REFERENCES other_table(column_name), -- 定义外键约束,引用其他表的主键
UNIQUE (column_name), -- 定义唯一约束,确保该列中的值唯一
CHECK (condition), -- 定义检查约束,确保列中的值满足指定条件
DEFAULT default_value -- 定义默认值,当插入时未指定该列的值时使用
);
-- 用于定义表的结构,包括列名称、数据类型、约束等。
-- 示例:创建一个名为 Employees 的表
CREATE TABLE Employees ( -- 创建一个名为 Employees 的表
EmployeeID INT NOT NULL AUTO_INCREMENT, -- 定义 EmployeeID 列,设置为非空且自动增加
FirstName VARCHAR(50) NOT NULL, -- 定义员工的名字,设置为非空
LastName VARCHAR(50) NOT NULL, -- 定义员工的姓氏,设置为非空
HireDate DATE DEFAULT CURRENT_DATE, -- 定义雇用日期,默认为当前日期
Salary DECIMAL(10, 2), -- 定义薪资,允许两个小数位
PRIMARY KEY (EmployeeID) -- 将 EmployeeID 列设为主键
);
-- 使用 AUTO_INCREMENT 生成唯一标识符,EmployeeID 列的值在每次插入新行时自动增加
-- 5. 删除表
DROP TABLE table_name; -- 删除名为 table_name 的表
-- 用于永久删除指定的表及其所有数据,操作不可逆。
-- 6. 修改表
ALTER TABLE table_name -- 修改表结构
ADD column_name datatype; -- 添加新列
-- 例如:ALTER TABLE table_name ADD age INT; -- 添加一个名为 age 的整数列
ALTER TABLE table_name
MODIFY column_name new_datatype; -- 修改已有列的数据类型
-- 例如:ALTER TABLE table_name MODIFY age VARCHAR(3); -- 将 age 列的数据类型改为 VARCHAR(3)
ALTER TABLE table_name
DROP COLUMN column_name; -- 删除指定的列
-- 例如:ALTER TABLE table_name DROP COLUMN age; -- 删除名为 age 的列
-- 7. 添加约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column_name); -- 为指定列添加唯一约束
-- 用于确保在列中不允许重复的值。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES other_table (other_column); -- 添加外键约束
-- 用于定义两张表之间的关系,确保数据的完整性。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (condition); -- 添加检查约束
-- 用于确保列中的数据满足特定条件。
-- 8. 删除约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name; -- 删除指定的约束
-- 用于删除已存在的约束(如主键、外键或唯一约束)。
-- 9. 创建索引
CREATE INDEX index_name ON table_name (column_name); -- 在指定列上创建索引
-- 用于加速对表中数据的查询操作,通常在经常查询的列上创建索引。
-- 10. 删除索引
DROP INDEX index_name ON table_name; -- 删除指定的索引
-- 用于删除先前创建的索引,以释放存储空间或提高性能。
-- 11. 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name; -- 将表重命名
-- 用于更改表的名称,保持表的内容不变。
-- 12. 重命名列
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name; -- 将列重命名
-- 用于更改表中列的名称,保持列的数据不变。
-- 13. 创建视图
CREATE VIEW view_name AS -- 创建一个名为 view_name 的视图
SELECT column1, column2
FROM table_name
WHERE condition; -- 视图可以用来简化复杂查询
-- 用于定义一个虚拟表,可以简化对复杂查询的访问。
-- 14. 删除视图
DROP VIEW view_name; -- 删除名为 view_name 的视图
-- 用于永久删除指定的视图。
-- 15. 创建触发器
CREATE TRIGGER trigger_name -- 创建一个触发器
AFTER INSERT ON table_name -- 触发器将在插入操作后执行
FOR EACH ROW
BEGIN
-- 触发器执行的操作,例如:
INSERT INTO log_table (log_message) VALUES ('Record inserted');
END;
-- 用于在特定事件发生时自动执行一段 SQL 代码。
-- 16. 删除触发器
DROP TRIGGER trigger_name; -- 删除名为 trigger_name 的触发器
-- 用于永久删除指定的触发器。
-- 17. 创建存储过程
CREATE PROCEDURE procedure_name (parameter1 datatype, parameter2 datatype) -- 创建一个存储过程
BEGIN
-- 存储过程的 SQL 语句
END;
-- 用于封装一组 SQL 语句,可以多次调用,支持参数传递。
-- 18. 删除存储过程
DROP PROCEDURE procedure_name; -- 删除名为 procedure_name 的存储过程
-- 用于永久删除指定的存储过程。
-- 19. 创建函数
CREATE FUNCTION function_name (parameter1 datatype) RETURNS return_datatype -- 创建一个函数
BEGIN
-- 函数的 SQL 语句
RETURN value; -- 返回计算结果
END;
-- 用于封装一组 SQL 语句,并返回单个值,可以在查询中使用。
-- 20. 删除函数
DROP FUNCTION function_name; -- 删除名为 function_name 的函数
-- 用于永久删除指定的函数。
-- 21. 描述表的结构
DESC table_name; -- 显示名为 table_name 的表的结构
-- 或
DESCRIBE table_name; -- 也可以使用 DESCRIBE 关键字
-- 用于查看表中各列的详细信息,帮助理解表的设计。
```
*
#### 数据操纵语言dml
* 数据操纵语言用于对数据库中的数据进行操作,包括插入、更新和删除数据。
*
```sql
-- 数据操纵语言(DML)命令
-- 插入单条数据
INSERT INTO table_name (column1, column2, ...) -- 指定要插入数据的表名和列名
VALUES (value1, value2, ...); -- 指定要插入的值,与列名一一对应
-- 插入多条数据
INSERT INTO table_name (column1, column2, ...) -- 指定要插入数据的表名和列名
VALUES
(value1_1, value2_1, ...), -- 第一条记录的值
(value1_2, value2_2, ...); -- 第二条记录的值
-- 可以继续添加更多记录,以逗号分隔
-- 更新数据
UPDATE table_name -- 指定要更新数据的表名
SET column1 = value1, column2 = value2, ... -- 指定要更新的列及其对应的新值
WHERE condition; -- 指定更新的条件,只有满足条件的记录会被更新
-- 如果未指定 WHERE 子句,将更新表中所有记录
-- 更新所有记录
UPDATE table_name SET column1 = value1; -- 更新表中所有记录的指定列为新值
-- 删除数据
DELETE FROM table_name -- 指定要删除数据的表名
WHERE condition; -- 指定删除的条件,只有满足条件的记录会被删除
-- 如果未指定 WHERE 子句,将删除表中所有记录
-- 删除所有记录
DELETE FROM table_name; -- 删除表中所有记录,但保留表的结构和定义
-- 查询数据
SELECT column1, column2, ... -- 指定要查询的列名,多个列用逗号分隔
FROM table_name -- 指定要查询的表名
WHERE condition; -- 指定查询的条件,只有满足条件的记录会被返回
-- 查询所有数据
SELECT * FROM table_name; -- 查询表中所有列的所有记录,* 表示所有列
-- 使用聚合函数统计记录
SELECT COUNT(*) FROM table_name; -- 统计表中的记录总数,返回满足条件的记录数量
-- 使用分组统计
SELECT column1, COUNT(*) -- 查询指定列及其记录计数
FROM table_name
GROUP BY column1; -- 按 column1 分组,将相同值的记录合并,计算每组的数量
-- 使用排序
SELECT column1, column2, ... -- 查询指定列
FROM table_name
ORDER BY column1 ASC|DESC; -- 按照指定列进行排序,ASC 表示升序,DESC 表示降序
-- 使用分组与排序结合
SELECT column1, COUNT(*) -- 查询指定列及其记录计数
FROM table_name
GROUP BY column1 -- 按 column1 分组
ORDER BY COUNT(*) DESC; -- 按计数结果降序排序
-- 使用条件限制返回结果
SELECT column1, column2, ... -- 查询指定列
FROM table_name
WHERE condition -- 指定查询的条件
LIMIT number; -- 限制返回结果的数量,number 是返回的最大行数
-- 使用 DISTINCT 关键字避免重复值
SELECT DISTINCT column1, column2 -- 查询唯一的列值,避免重复记录
FROM table_name; -- 指定要查询的表
-- 使用 LIKE 进行模糊查询
SELECT column1, column2 -- 查询指定列
FROM table_name
WHERE column1 LIKE 'pattern'; -- 指定模糊查询的模式,使用 % 通配符表示任意字符
-- 使用 IN 进行多值匹配
SELECT column1, column2 -- 查询指定列
FROM table_name
WHERE column1 IN (value1, value2, ...); -- 指定匹配多个值的条件,只有列值在指定列表中的记录会被返回
-- 使用 JOIN 连接多个表
SELECT a.column1, b.column2 -- 查询多个表中的指定列
FROM table_a a -- 第一个表,a 是表的别名
JOIN table_b b ON a.common_column = b.common_column; -- 通过公共列连接表,b 是第二个表的别名
-- 使用 UNION 合并多个查询结果
SELECT column1 FROM table_name_1 -- 从第一个表查询指定列
UNION -- 合并结果,去除重复
SELECT column1 FROM table_name_2; -- 从第二个表查询指定列
-- UNION ALL 可用于包括重复值
-- 使用 HAVING 进行分组后条件限制
SELECT column1, COUNT(*) -- 查询指定列及其记录计数
FROM table_name
GROUP BY column1 -- 按 column1 分组
HAVING COUNT(*) > 1; -- 限制只返回记录计数大于 1 的分组
```
*
#### 事物控制语言tcl
* 事务控制语言用于管理数据库事务,确保数据的一致性和完整性。
*
```sql
-- 事务控制语言(TCL)命令
-- 开始事务
BEGIN; -- 开始一个新的事务,后续的操作将在该事务中进行
-- 该命令表示后续所有的数据库操作将被视为一个整体,只有在提交时才会生效。
-- 提交事务
COMMIT; -- 提交当前事务,将所有在该事务中的操作永久保存到数据库中
-- 一旦提交,所有更改将不可逆,其他用户可以看到这些更改。
-- 回滚事务
ROLLBACK; -- 回滚当前事务,撤销自事务开始以来所做的所有操作
-- 此命令用于恢复到事务开始之前的状态,所有未提交的更改将被撤销。
-- 设置保存点
SAVEPOINT savepoint_name; -- 创建一个保存点,允许在后续的回滚中返回到该保存点
-- 保存点是在事务中定义的,允许将事务分割为多个可恢复的部分。
-- 回滚到保存点
ROLLBACK TO savepoint_name; -- 将事务回滚到指定的保存点,撤销保存点之后的所有操作
-- 这使得开发者可以在事务中选择性地撤回某些操作,而不是全部撤回。
-- 使用示例
BEGIN; -- 开始事务
-- 执行多个 SQL 操作
INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 插入数据
UPDATE table_name SET column1 = new_value WHERE condition; -- 更新数据
DELETE FROM table_name WHERE condition; -- 删除数据
-- 根据条件决定是否提交或回滚
IF some_condition THEN
COMMIT; -- 如果条件满足,提交事务
ELSE
ROLLBACK; -- 否则,回滚事务
END IF;
-- 示例中的条件逻辑可以根据业务需求进行修改,例如根据插入、更新或删除的结果决定是否提交事务。
```
*
#### 数据查询语言dql
* 数据查询语言用于从数据库中查询数据。它通常使用 `SELECT` 语句来检索数据。
*
```sql
-- 数据查询语言(DQL)命令
-- 1. 基本查询
SELECT column1 as '别名', column2, ... -- 指定要查询的列名,多个列用逗号分隔
FROM table_name; -- 指定要查询数据的表名
-- 该命令用于从指定的表中查询数据。如果需要查询所有列,可以使用 `SELECT *`。
-- 2. 使用条件查询
SELECT column1, column2, ...
FROM table_name
WHERE condition; -- 使用 WHERE 子句指定查询条件,返回满足条件的记录
-- WHERE 子句可以用于过滤数据,例如根据特定的列值或表达式筛选记录。
-- 3. 使用 DISTINCT 去重
SELECT DISTINCT column1 -- 查询唯一的列值,避免返回重复的记录
FROM table_name;
-- DISTINCT 用于确保查询结果中的值都是唯一的,避免重复值的出现。
-- 4. 使用 ORDER BY 排序
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC|DESC; -- 按照指定列进行排序,ASC 为升序,DESC 为降序
-- 通过 ORDER BY 子句,可以按一个或多个列进行排序,方便用户对结果进行排列。
-- 5. 使用 LIMIT 限制返回记录数
SELECT column1, column2, ...
FROM table_name
LIMIT number; -- 限制返回的记录数量,number 表示最大行数
-- 该命令通常用于控制返回结果的行数,特别是在返回大量数据时用于分页或性能优化。
-- 6. 使用 LIKE 进行模糊查询
SELECT column1, column2, ...
FROM table_name
WHERE column1 LIKE 'pattern'; -- 使用 LIKE 进行模式匹配,% 表示任意多个字符
-- LIKE 通常用于进行模糊匹配查询,支持通配符 `%` 和 `_`。
-- 7. 使用聚合函数进行统计
SELECT COUNT(*), SUM(column1), AVG(column1), MAX(column1), MIN(column1)
FROM table_name; -- 使用聚合函数进行统计操作
-- 聚合函数用于对查询结果进行汇总操作,如计数、求和、平均值、最大值和最小值。
-- 8. 使用 GROUP BY 分组查询
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1; -- 按指定列进行分组,统计每个组的记录数
-- GROUP BY 用于将结果集按一个或多个列分组,可以结合聚合函数对每组数据进行统计。
-- 9. 使用 HAVING 对分组结果进行过滤
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 1; -- 使用 HAVING 对分组后的结果进行过滤
-- HAVING 通常与 GROUP BY 一起使用,用于对分组后的结果进行进一步过滤。
-- 10. 使用 JOIN 进行多表查询
SELECT a.column1, b.column2
FROM table_a a
JOIN table_b b ON a.common_column = b.common_column; -- 使用 JOIN 连接多个表
-- JOIN 用于在多张表之间根据公共列进行关联查询,可以通过 INNER JOIN、LEFT JOIN、RIGHT JOIN 等类型连接表。
-- 11. 使用 UNION 合并查询结果
SELECT column1 FROM table_name_1
UNION
SELECT column1 FROM table_name_2; -- 合并两个查询结果,去除重复值
-- UNION 用于将多个查询的结果合并在一起,并自动去重。
-- 12. 使用 SUBQUERY 进行子查询
SELECT column1
FROM table_name
WHERE column2 IN (SELECT column2 FROM other_table WHERE condition); -- 使用子查询
-- 子查询可以在主查询中作为条件,允许在查询中嵌套其他查询。
-- 13. WITH 子句(公用表表达式,CTE)
WITH cte_name AS (
SELECT column1, column2
FROM table_name
WHERE condition
)
SELECT *
FROM cte_name; -- 使用公用表表达式(CTE)进行更复杂的查询
-- CTE 使查询更具可读性,尤其是在嵌套查询较多时。
-- 14. CASE 语句
SELECT column1,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END AS alias_name
FROM table_name; -- 根据条件返回不同的结果
-- 用于条件逻辑,允许在查询中返回不同的值。
-- 15. EXISTS 关键字
SELECT column1
FROM table_name
WHERE EXISTS (SELECT 1 FROM other_table WHERE condition); -- 检查子查询的结果是否存在
-- 用于检查某个条件是否至少返回一条记录。
-- 16. GROUP_CONCAT 函数
SELECT column1, GROUP_CONCAT(column2)
FROM table_name
GROUP BY column1; -- 将多个行合并为一个字符串
-- 在分组结果中将多行数据合并为一个字符串。
-- 17. LIMIT 和 OFFSET 结合使用
SELECT column1, column2
FROM table_name
LIMIT number OFFSET offset_value; -- 用于分页查询
-- 限制查询结果的数量,同时指定从哪一行开始返回记录。
-- 18. FULL OUTER JOIN
SELECT a.column1, b.column2
FROM table_a a
FULL OUTER JOIN table_b b ON a.common_column = b.common_column; -- 返回两个表中的所有记录
-- 返回左表和右表的所有记录,即使在其中一个表中没有匹配的记录。
-- 19. INTERSECT
SELECT column1 FROM table_name_1
INTERSECT
SELECT column1 FROM table_name_2; -- 返回两个查询的交集
-- 获取两个查询结果的共同记录。
-- 20. ROLLUP 和 CUBE
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1 WITH ROLLUP; -- 生成分组的汇总数据
-- ROLLUP 和 CUBE 用于生成多维汇总数据。
-- 21. UNNEST(适用于支持数组的数据库)
SELECT UNNEST(array_column) FROM table_name; -- 将数组列展开为多行
-- 将数组或集合类型的数据展开成多个行。
```
*
#### 数据控制语言dcl
* 数据控制语言用于控制对数据的访问权限,管理用户的权限。
*
```sql
-- 数据控制语言(DCL)命令
-- 1. 授予权限
GRANT privilege_type ON object_type object_name TO user_name; -- 授予指定用户权限
-- privilege_type:可以是 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALL PRIVILEGES(所有权限)等。
-- object_type:可以是 TABLE(表)、DATABASE(数据库)、PROCEDURE(存储过程)等。
-- object_name:指定权限授予的对象名称,例如:my_database.my_table。
-- user_name:需要授予权限的用户名或角色,通常以 'username'@'host' 的形式指定。
-- 例:
-- GRANT SELECT ON my_database.my_table TO 'username'@'localhost'; -- 授予指定用户在指定表上的 SELECT 权限
-- 2. 撤销权限
REVOKE privilege_type ON object_type object_name FROM user_name; -- 撤销指定用户的权限
-- privilege_type、object_type、object_name 和 user_name 的含义与 GRANT 命令相同。
-- 例:
-- REVOKE SELECT ON my_database.my_table FROM 'username'@'localhost'; -- 撤销指定用户在指定表上的 SELECT 权限
-- 3. 显示用户权限
SHOW GRANTS FOR user_name; -- 显示指定用户的权限
-- 用于查看特定用户在数据库中的所有权限,以便确认其访问权限。
-- 例:
-- SHOW GRANTS FOR 'username'@'localhost'; -- 显示指定用户的所有权限信息
-- 4. 创建角色
CREATE ROLE role_name; -- 创建一个新的角色
-- 用于定义一组权限,这些权限可以集中管理并分配给多个用户。
-- 例:
-- CREATE ROLE 'my_role'; -- 创建一个名为 my_role 的角色
-- 5. 授予角色权限
GRANT privilege_type ON object_type object_name TO role_name; -- 将权限授予角色
-- 角色可以集成多个权限,方便管理和分配。
-- 例:
-- GRANT SELECT, INSERT ON my_database.my_table TO 'my_role'; -- 授予角色在指定表上的 SELECT 和 INSERT 权限
-- 6. 授予角色给用户
GRANT role_name TO user_name; -- 将角色授予指定用户
-- 通过角色管理权限的分配,提高权限管理的灵活性。
-- 例:
-- GRANT 'my_role' TO 'username'@'localhost'; -- 将名为 my_role 的角色授予指定用户
-- 7. 撤销角色
REVOKE role_name FROM user_name; -- 从指定用户撤销角色
-- 撤销用户对角色的访问权限,从而限制其权限。
-- 例:
-- REVOKE 'my_role' FROM 'username'@'localhost'; -- 从指定用户撤销角色
-- 8. 删除角色
DROP ROLE role_name; -- 删除指定的角色
-- 删除不再需要的角色及其权限定义。
-- 例:
-- DROP ROLE 'my_role'; -- 删除名为 my_role 的角色
-- 9. 设定默认角色
SET DEFAULT ROLE role_name TO user_name; -- 为用户设定默认角色
-- 在用户登录时自动使用该角色的权限。
-- 例:
-- SET DEFAULT ROLE 'my_role' TO 'username'@'localhost'; -- 将 my_role 设为指定用户的默认角色
-- 10. 角色权限检查
SET ROLE role_name; -- 切换到指定角色
-- 允许用户在登录会话中使用角色的权限。
-- 例:
-- SET ROLE 'my_role'; -- 切换到名为 my_role 的角色
-- 11. 显示当前用户
SELECT CURRENT_USER(); -- 显示当前连接的用户
-- 用于确认当前连接的用户身份,特别是在多用户环境下。
-- 例:
-- SELECT CURRENT_USER(); -- 查询当前用户信息
-- 12. 显示当前数据库
SELECT DATABASE(); -- 显示当前使用的数据库
-- 用于确认当前连接操作的是哪个数据库。
-- 例:
-- SELECT DATABASE(); -- 查询当前数据库信息
```