SQL常用命令

SQL常用命令

常用 SQL 语句用法整理

SQL常用命令

常用 SQL 语句用法清单。

查询语句

SELECT

sql
# 基本信息
命令名称: SELECT
功能描述: SELECT语句用于从数据库表中查询数据
分类: 查询语句
标签: 查询, 检索, 数据, 基础

# 语法格式
`SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column] [LIMIT n];`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| * | 选择所有列 |
| DISTINCT | 去除重复记录 |
| AS | 为列或表指定别名 |

# 注意事项
SELECT是SQL最基本的查询语句  
支持各种条件过滤和排序  
可以与JOIN、WHERE、GROUP BY等子句组合  
使用*会查询所有列,生产环境建议指定列名

WHERE

sql
# 基本信息
命令名称: WHERE
功能描述: WHERE子句用于筛选满足特定条件的记录
分类: 查询语句
标签: 筛选, 条件, 过滤, 基础

# 语法格式
`SELECT column1, column2, ... FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| = | 等于 |
| != 或 <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| LIKE | 模式匹配 |
| IN | 指定范围内的值 |
| BETWEEN | 指定范围 |
| IS NULL | 判断是否为空值 |

# 注意事项
WHERE子句用于限制查询结果的条件  
通常与SELECT、UPDATE、DELETE语句一起使用  
WHERE子句中的条件可以使用AND、OR、NOT逻辑运算符连接  
字符串比较时注意大小写敏感性

JOIN

sql
# 基本信息
命令名称: JOIN
功能描述: JOIN子句用于连接多个表的数据
分类: 查询语句
标签: 连接, 关联, 多表, 基础

# 语法格式
`SELECT column1, column2, ... FROM table1 JOIN table2 ON table1.column = table2.column;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| INNER JOIN | 内连接,返回两个表中都有的记录 |
| LEFT JOIN | 左外连接,返回左表的所有记录 |
| RIGHT JOIN | 右外连接,返回右表的所有记录 |
| FULL OUTER JOIN | 全外连接,返回两个表中的所有记录 |

# 注意事项
JOIN是处理多表关联查询的重要方式  
INNER JOIN是最常用的连接类型  
LEFT JOIN会包含左表的所有记录,即使右表没有对应记录  
连接条件必须在ON子句中明确指定

GROUP BY

sql
# 基本信息
命令名称: GROUP BY
功能描述: GROUP BY子句用于对查询结果进行分组
分类: 查询语句
标签: 分组, 统计, 聚合, 基础

# 语法格式
`SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1, column2;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| 一个或多个列 | 按指定列进行分组 |
| 聚合函数 | COUNT(), SUM(), AVG(), MAX(), MIN()等 |

# 注意事项
GROUP BY常与聚合函数一起使用  
GROUP BY子句必须包含SELECT子句中非聚合函数的所有列  
通常在WHERE子句之后,在ORDER BY子句之前  
分组后每组只返回一行结果

ORDER BY

sql
# 基本信息
命令名称: ORDER BY
功能描述: ORDER BY子句用于对查询结果进行排序
分类: 查询语句
标签: 排序, 升序, 降序, 基础

# 语法格式
`SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column] LIMIT n [OFFSET m];`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| ASC | 升序排列(默认) |
| DESC | 降序排列 |
| 一个或多个列 | 按指定列进行排序 |

# 注意事项
ORDER BY子句用于对查询结果进行排序  
ASC表示升序,DESC表示降序  
可以按多个列进行排序,优先级从前到后  
排序会影响查询性能,大数据量时需谨慎使用

LIMIT

sql
# 基本信息
命令名称: LIMIT
功能描述: LIMIT子句用于限制查询结果的数量
分类: 查询语句
标签: 限制, 分页, 性能, 优化

# 语法格式
`SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column] LIMIT n [OFFSET m];`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| n | 返回前n条记录 |
| OFFSET m | 跳过m条记录开始返回 |

# 注意事项
LIMIT用于控制返回结果的数量  
常用于实现分页功能  
与ORDER BY结合使用可确保结果的一致性  
不同数据库系统语法可能略有差异(如SQL Server使用TOP)

DISTINCT

sql
# 基本信息
命令名称: DISTINCT
功能描述: DISTINCT关键字用于去除查询结果中的重复记录
分类: 查询语句
标签: 去重, 唯一, 重复, 过滤

# 语法格式
`SELECT DISTINCT column1, column2, ... FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| 单个列 | 根据该列去重 |
| 多个列 | 根据多个列的组合去重 |

# 注意事项
DISTINCT会返回唯一不重复的记录  
对多个列使用时,是基于这些列的组合值进行去重  
DISTINCT会影响查询性能,大数据量时需谨慎使用  
NULL值在去重时会被视为相同值

UNION

sql
# 基本信息
命令名称: UNION
功能描述: UNION操作符用于合并两个或多个SELECT语句的结果集
分类: 查询语句
标签: 合并, 结果集, 联合, 去重

# 语法格式
`SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| UNION | 合并结果并去除重复行 |
| UNION ALL | 合并结果保留所有行(包括重复行) |

# 注意事项
UNION要求参与合并的SELECT语句列数必须相同  
对应列的数据类型必须兼容  
UNION会自动去除重复记录,UNION ALL保留所有记录  
各SELECT语句中的列名以第一个SELECT语句为准

数据操作

INSERT

sql
# 基本信息
命令名称: INSERT
功能描述: INSERT语句用于向数据库表中插入新记录
分类: 数据操作语句
标签: 插入, 添加, 新增, 数据修改

# 语法格式
`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| INSERT INTO | 指定要插入数据的表 |
| VALUES | 指定要插入的具体值 |
| SELECT | 从其他表中查询数据并插入 |

# 注意事项
INSERT语句必须与表结构保持一致  
VALUES的数量和顺序必须与指定的列匹配  
如果省略列名,则需要为表中所有列提供值  
可以使用INSERT INTO ... SELECT语句从其他表复制数据

UPDATE

sql
# 基本信息
命令名称: UPDATE
功能描述: UPDATE语句用于更新数据库表中的现有记录
分类: 数据操作语句
标签: 更新, 修改, 编辑, 数据修改

# 语法格式
`UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| SET | 指定要更新的列和新值 |
| WHERE | 指定更新哪些记录的条件 |
| SET 多列 | 使用逗号分隔多个列的更新 |

# 注意事项
务必在UPDATE语句中使用WHERE子句,否则会更新表中的所有记录  
can一次更新多个列的值  
更新时需要注意数据类型的匹配  
在执行更新操作前,建议先用SELECT验证WHERE条件

DELETE

sql
# 基本信息
命令名称: DELETE
功能描述: DELETE语句用于删除数据库表中的记录
分类: 数据操作语句
标签: 删除, 移除, 清除, 数据修改

# 语法格式
`DELETE FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| DELETE FROM | 指定要删除数据的表 |
| WHERE | 指定删除哪些记录的条件 |
| TRUNCATE | 清空整个表(另一种方法) |

# 注意事项
务必在DELETE语句中使用WHERE子句,否则会删除表中的所有记录  
DELETE只删除记录,不删除表结构  
删除操作不可逆,请谨慎操作  
在执行删除操作前,建议先用SELECT验证WHERE条件

表操作

CREATE TABLE

sql
# 基本信息
命令名称: CREATE TABLE
功能描述: CREATE TABLE语句用于创建新的数据库表
分类: 表操作语句
标签: 创建, 表, 定义, 结构

# 语法格式
`CREATE TABLE table_name (column1 datatype constraints, column2 datatype constraints, ...);`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| 数据类型 | 如INT, VARCHAR(n), DATE, TEXT等 |
| 主键约束 | PRIMARY KEY |
| 非空约束 | NOT NULL |
| 默认值 | DEFAULT value |
| 唯一约束 | UNIQUE |

# 注意事项
定义表结构时应考虑数据完整性约束  
VARCHAR类型需要指定最大长度  
主键字段不能有重复值且不能为NULL  
创建表前应检查表是否已存在

ALTER TABLE

sql
# 基本信息
命令名称: ALTER TABLE
功能描述: ALTER TABLE语句用于修改现有表的结构
分类: 表操作语句
标签: 修改, 表结构, 扩展, 维护

# 语法格式
`ALTER TABLE table_name ADD|DROP|MODIFY column_name datatype constraints;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| ADD | 添加新列 |
| DROP COLUMN | 删除列 |
| MODIFY/ALTER | 修改列定义 |
| RENAME | 重命名表或列 |

# 注意事项
ALTER TABLE操作可能影响正在使用的应用程序  
某些数据库系统不支持直接删除列  
修改表结构前备份数据是良好的习惯  
修改大表结构可能需要较长时间

DROP TABLE

sql
# 基本信息
命令名称: DROP TABLE
功能描述: DROP TABLE语句用于删除整个数据库表及其结构
分类: 表操作语句
标签: 删除, 表, 清空, 结构移除

# 语法格式
`DROP TABLE table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| DROP TABLE | 删除表及其结构 |
| IF EXISTS | 如果表存在则删除(防止错误) |

# 注意事项
DROP TABLE会删除表及其中的所有数据  
此操作不可逆,请谨慎执行  
删除表前确认没有其他表依赖该表(如外键关系)  
某些数据库系统可能需要特殊权限

TRUNCATE

sql
# 基本信息
命令名称: TRUNCATE
功能描述: TRUNCATE语句用于清空表中的所有数据但保留表结构
分类: 表操作语句
标签: 清空, 数据删除, 重置, 快速删除

# 语法格式
`TRUNCATE TABLE table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| TRUNCATE TABLE | 清空表中所有数据 |
| RESTART IDENTITY | 重置自增计数器(某些数据库) |

# 注意事项
TRUNCATE比DELETE更快,因为它不记录单行删除  
TRUNCATE保留表结构和约束  
此操作通常不可回滚  
TRUNCATE可能会重置自增ID计数器

索引操作

CREATE INDEX

sql
# 基本信息
命令名称: CREATE INDEX
功能描述: CREATE INDEX语句用于在表上创建索引以提高查询性能
分类: 索引操作语句
标签: 索引, 性能, 查询优化, 加速

# 语法格式
`CREATE INDEX index_name ON table_name (column1, column2, ...);`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| INDEX | 创建普通索引 |
| UNIQUE INDEX | 创建唯一索引 |
| CLUSTERED | 创建聚集索引 |
| NONCLUSTERED | 创建非聚集索引 |

# 注意事项
索引可以显著提高查询速度  
过多的索引会影响插入、更新和删除性能  
应在经常用于查询条件的列上创建索引  
唯一索引可以保证数据的唯一性

DROP INDEX

sql
# 基本信息
命令名称: DROP INDEX
功能描述: DROP INDEX语句用于删除数据库中的索引
分类: 索引操作语句
标签: 删除, 索引移除, 性能调整, 维护

# 语法格式
`DROP INDEX index_name ON table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| DROP INDEX | 删除指定索引 |
| CASCADE | 自动删除相关依赖项(某些数据库) |

# 注意事项
删除索引会影响依赖该索引的查询性能  
删除索引会立即生效,无法恢复  
删除索引前应评估对查询性能的影响  
某些主键或唯一约束相关的索引可能无法直接删除

聚合函数

COUNT

sql
# 基本信息
命令名称: COUNT
功能描述: COUNT函数用于计算行数
分类: 聚合函数
标签: 计数, 统计, 聚合, 行数

# 语法格式
`SELECT COUNT(*) | COUNT(column) | COUNT(DISTINCT column) FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| COUNT(*) | 计算所有行(包括NULL) |
| COUNT(column) | 计算指定列非NULL值的行数 |
| COUNT(DISTINCT column) | 计算指定列不同值的数量 |

# 注意事项
COUNT(*)计算所有行,无论是否有NULL值  
COUNT(column)忽略NULL值  
COUNT可以与其他子句如GROUP BY结合使用  
对于大表,COUNT(*)可能执行较慢

SUM

sql
# 基本信息
命令名称: SUM
功能描述: SUM函数用于计算数值列的总和
分类: 聚合函数
标签: 求和, 总计, 数值计算, 聚合

# 语法格式
`SELECT SUM(column) FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| SUM(column) | 计算指定列的总和 |
| SUM(DISTINCT column) | 计算指定列不同值的总和 |

# 注意事项
SUM函数只能用于数值类型的列  
SUM函数会忽略NULL值  
当没有符合条件的行时,返回NULL  
SUM可以与GROUP BY结合使用

AVG

sql
# 基本信息
命令名称: AVG
功能描述: AVG函数用于计算数值列的平均值
分类: 聚合函数
标签: 平均值, 统计, 数值计算, 聚合

# 语法格式
`SELECT AVG(column) FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| AVG(column) | 计算指定列的平均值 |
| AVG(DISTINCT column) | 计算指定列不同值的平均值 |

# 注意事项
AVG函数只能用于数值类型的列  
AVG函数会忽略NULL值  
当没有符合条件的行时,返回NULL  
AVG可以与GROUP BY结合使用

MAX/MIN

sql
# 基本信息
命令名称: MAX/MIN
功能描述: MAX函数返回最大值,MIN函数返回最小值
分类: 聚合函数
标签: 最大值, 最小值, 极值, 聚合

# 语法格式
`SELECT MAX(column) | MIN(column) FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| MAX(column) | 返回指定列的最大值 |
| MIN(column) | 返回指定列的最小值 |

# 注意事项
MAX/MIN函数可用于数值、日期和字符串类型  
这些函数会忽略NULL值  
当没有符合条件的行时,返回NULL  
可以与GROUP BY结合使用获取各组的极值

字符串函数

CONCAT

sql
# 基本信息
命令名称: CONCAT
功能描述: CONCAT函数用于连接两个或多个字符串
分类: 字符串函数
标签: 连接, 拼接, 字符串, 合并

# 语法格式
`SELECT CONCAT(string1, string2, ...) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| string1, string2, ... | 要连接的字符串或列 |
| CONCAT_WS | 带分隔符的连接函数 |

# 注意事项
CONCAT函数会忽略NULL值(某些数据库会将整个结果变为NULL)  
可以连接列与固定字符串  
不同数据库系统可能有不同的连接操作符(如||)  
使用CONCAT_WS可指定分隔符进行连接

SUBSTRING

sql
# 基本信息
命令名称: SUBSTRING
功能描述: SUBSTRING函数用于提取字符串的一部分
分类: 字符串函数
标签: 截取, 子串, 提取, 字符串

# 语法格式
`SELECT SUBSTRING(column, start, length) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| column | 要提取的字符串或列 |
| start | 开始位置(从1开始) |
| length | 提取长度(可选) |

# 注意事项
起始位置从1开始计数  
如果省略长度,则返回从开始位置到字符串末尾的所有字符  
当开始位置超出字符串长度时返回空字符串  
负数位置在某些数据库中表示从字符串末尾开始计算

UPPER/LOWER

sql
# 基本信息
命令名称: UPPER/LOWER
功能描述: UPPER函数将字符串转换为大写,LOWER函数将字符串转换为小写
分类: 字符串函数
标签: 大小写, 转换, 格式化, 字符串

# 语法格式
`SELECT UPPER(column) | LOWER(column) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| UPPER | 转换为大写 |
| LOWER | 转换为小写 |

# 注意事项
大小写转换对索引性能可能有影响  
不适用于二进制数据  
在WHERE条件中使用时注意大小写敏感性设置  
可用于规范化数据进行比较

TRIM

sql
# 基本信息
命令名称: TRIM
功能描述: TRIM函数用于去除字符串首尾的空白字符
分类: 字符串函数
标签: 去除, 空格, 清理, 字符串

# 语法格式
`SELECT TRIM([LEADING|TRAILING|BOTH] [characters] FROM column) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| TRIM() | 去除两端空白 |
| LTRIM() | 去除左侧空白 |
| RTRIM() | 去除右侧空白 |
| 自定义字符 | 可指定要去除的特定字符 |

# 注意事项
默认去除空格,但也可指定其他字符  
有助于清理用户输入数据  
在比较字符串前建议使用TRIM避免意外  
不同数据库系统的TRIM实现可能略有差异

日期函数

NOW

sql
# 基本信息
命令名称: NOW
功能描述: NOW函数返回当前的日期和时间
分类: 日期函数
标签: 当前, 时间, 日期, 实时

# 语法格式
`SELECT NOW() | CURRENT_TIMESTAMP FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| NOW() | 返回当前日期时间 |
| CURDATE() | 仅返回当前日期 |
| CURTIME() | 仅返回当前时间 |

# 注意事项
返回的日期时间基于服务器时区  
可用于记录创建或更新时间戳  
在插入语句中常作为默认值使用  
不同数据库系统可能有不同的函数名称

DATE_FORMAT

sql
# 基本信息
命令名称: DATE_FORMAT
功能描述: DATE_FORMAT函数用于格式化日期为指定的字符串格式
分类: 日期函数
标签: 格式化, 显示, 转换, 日期

# 语法格式
`SELECT DATE_FORMAT(date_column, format) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| %Y | 4位数年份 |
| %y | 2位数年份 |
| %m | 月份(01-12) |
| %d | 日期(01-31) |
| %H | 小时(00-23) |
| %i | 分钟(00-59) |
| %s | 秒(00-59) |

# 注意事项
格式化模式在不同数据库系统中可能不同  
有助于生成报表友好的日期显示  
在GROUP BY中可用于按年月分组统计  
注意时区转换问题

DATE_ADD

sql
# 基本信息
命令名称: DATE_ADD
功能描述: DATE_ADD函数用于在日期上添加指定的时间间隔
分类: 日期函数
标签: 增加, 计算, 间隔, 日期

# 语法格式
`SELECT DATE_ADD(date, INTERVAL expr unit) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| INTERVAL | 表示时间间隔 |
| expr | 数值表达式 |
| unit | 单位(DAY, MONTH, YEAR等) |

# 注意事项
可用于计算到期日、截止日期等  
支持多种时间单位:SECOND, MINUTE, HOUR, DAY, MONTH, YEAR等  
减法操作可使用负数值或DATE_SUB函数  
注意闰年和月份天数变化的影响

条件函数

CASE WHEN

sql
# 基本信息
命令名称: CASE WHEN
功能描述: CASE WHEN语句用于实现条件逻辑判断
分类: 条件函数
标签: 条件, 判断, 分支, 逻辑

# 语法格式

-- 简单CASE SELECT CASE column WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default_result END FROM table_name;

-- 搜索CASE SELECT CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default_result END FROM table_name;

text
# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| CASE WHEN | 条件判断 |
| THEN | 满足条件的结果 |
| ELSE | 默认结果 |
| END | 结束标记 |

# 注意事项
CASE是SQL标准的条件表达式  
可以在SELECT、ORDER BY、HAVING等子句中使用  
ELSE子句是可选的,但建议包含以处理未预期情况  
性能上优于多次查询

IF

sql
# 基本信息
命令名称: IF
功能描述: IF函数用于简单的条件判断(某些数据库特有)
分类: 条件函数
标签: 条件, 判断, 简单, 快速

# 语法格式
`SELECT IF(condition, value_if_true, value_if_false) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| condition | 要评估的条件 |
| value_if_true | 条件为真时的值 |
| value_if_false | 条件为假时的值 |

# 注意事项
并非所有数据库都支持IF函数(如MySQL支持,但PostgreSQL不支持)  
对于复杂条件建议使用CASE WHEN  
可用于在查询中动态生成值  
嵌套IF可能导致代码难以维护

COALESCE

sql
# 基本信息
命令名称: COALESCE
功能描述: COALESCE函数返回参数列表中第一个非NULL的值
分类: 条件函数
标签: 空值, 替代, 默认, 处理

# 语法格式
`SELECT COALESCE(column1, column2, ..., default_value) FROM table_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| column1, column2, ... | 按优先级检查的列 |
| default_value | 最终默认值 |

# 注意事项
COALESCE是SQL标准函数,广泛支持  
常用于处理可能为NULL的字段  
所有参数必须是兼容的数据类型  
可用于提供备用值或默认值

约束

PRIMARY KEY

sql
# 基本信息
命令名称: PRIMARY KEY
功能描述: 主键约束用于唯一标识表中的每一行记录
分类: 约束
标签: 主键, 唯一, 标识, 完整性

# 语法格式

-- 创建时定义 CREATE TABLE table_name ( id INT PRIMARY KEY, name VARCHAR(50) );

-- 添加主键 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY (column);

text
# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| PRIMARY KEY | 定义主键 |
| AUTO_INCREMENT | 自动递增(MySQL) |
| IDENTITY | 自动递增(SQL Server) |

# 注意事项
每个表只能有一个主键  
主键列不能包含NULL值  
主键值必须唯一  
主键会自动创建唯一索引

FOREIGN KEY

sql
# 基本信息
命令名称: FOREIGN KEY
功能描述: 外键约束用于建立和加强两个表数据之间的链接
分类: 约束
标签: 外键, 关联, 引用, 完整性

# 语法格式

-- 创建时定义 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, FOREIGN KEY (customer_id) REFERENCES customers(id) );

-- 添加外键 ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES parent_table(column);

text
# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| REFERENCES | 指定引用的表和列 |
| ON DELETE CASCADE | 删除父记录时级联删除子记录 |
| ON UPDATE CASCADE | 更新父记录时级联更新子记录 |

# 注意事项
外键必须引用另一个表的主键或唯一键  
确保引用完整性,防止孤立记录  
级联操作需谨慎使用,避免意外删除大量数据  
可能影响插入和删除性能

UNIQUE

sql
# 基本信息
命令名称: UNIQUE
功能描述: 唯一约束确保列中的所有值都是唯一的
分类: 约束
标签: 唯一, 重复, 验证, 完整性

# 语法格式

-- 创建时定义 CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) UNIQUE );

-- 添加唯一约束 ALTER TABLE table_name ADD CONSTRAINT uk_name UNIQUE (column);

text
# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| UNIQUE | 定义唯一约束 |
| 多列组合 | 可在多个列上定义唯一约束 |

# 注意事项
与主键不同,唯一约束允许NULL值(但只允许一个NULL)  
可在非主键列上创建,如邮箱、身份证号等  
会自动创建唯一索引  
每个表可以有多个唯一约束

NOT NULL

sql
# 基本信息
命令名称: NOT NULL
功能描述: 非空约束确保列中不能包含NULL值
分类: 约束
标签: 非空, 必填, 验证, 完整性

# 语法格式

-- 创建时定义 CREATE TABLE table_name ( column1 datatype NOT NULL, column2 datatype );

-- 修改列添加约束 ALTER TABLE table_name ALTER COLUMN column SET NOT NULL;

text
# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| NOT NULL | 定义非空约束 |
| DEFAULT | 通常与默认值一起使用 |

# 注意事项
强制要求该列必须有值  
在INSERT或UPDATE时必须提供值  
NULL与空字符串不同  
建议对重要业务字段设置此约束

子查询

IN

sql
# 基本信息
命令名称: IN
功能描述: IN操作符用于在WHERE子句中匹配子查询返回的结果集
分类: 子查询
标签: 包含, 列表, 匹配, 查询

# 语法格式
`SELECT column1, column2, ... FROM table_name WHERE column IN (SELECT column FROM table_name2 WHERE condition);`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| IN | 匹配任意一个值 |
| NOT IN | 排除结果集中的值 |

# 注意事项
子查询必须返回单列结果  
IN比多个OR条件更简洁高效  
NOT IN在包含NULL值时需特别注意(结果可能为UNKNOWN)  
性能取决于子查询结果集大小

EXISTS

sql
# 基本信息
命令名称: EXISTS
功能描述: EXISTS操作符用于检查子查询是否返回任何行
分类: 子查询
标签: 存在, 检查, 验证, 查询

# 语法格式
`SELECT column1, column2, ... FROM table_name t1 WHERE EXISTS (SELECT 1 FROM table_name2 t2 WHERE t2.column = t1.column);`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| EXISTS | 检查是否存在行 |
| NOT EXISTS | 检查是否不存在行 |

# 注意事项
EXISTS是半连接,只要找到一行就停止搜索  
通常比IN更高效,特别是大数据集时  
子查询中SELECT的列名不重要,常用SELECT 1  
可用于相关子查询,实现复杂的逻辑判断

视图

CREATE VIEW

sql
# 基本信息
命令名称: CREATE VIEW
功能描述: CREATE VIEW语句用于创建虚拟表,基于SELECT查询结果
分类: 视图
标签: 视图, 虚拟表, 封装, 简化

# 语法格式
`CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| CREATE VIEW | 创建新视图 |
| OR REPLACE | 替换已存在的视图 |
| WITH CHECK OPTION | 确保通过视图修改的数据符合视图定义 |

# 注意事项
视图不存储数据,只是保存查询定义  
可以像普通表一样进行查询  
简化复杂查询,提高重用性  
可通过视图更新数据,但有限制

DROP VIEW

sql
# 基本信息
命令名称: DROP VIEW
功能描述: DROP VIEW语句用于删除已存在的视图
分类: 视图
标签: 删除, 移除, 清理, 维护

# 语法格式
`DROP VIEW view_name;`

# 常用选项
| :-- | :-- |
| 参数 | 描述 |
| DROP VIEW | 删除视图 |
| IF EXISTS | 如果存在则删除(防止错误) |

# 注意事项
DROP VIEW只删除视图定义,不影响基础表数据  
删除视图后,依赖该视图的查询将失败  
建议在删除前确认没有应用程序依赖该视图  
某些数据库系统需要特定权限才能删除视图
TOML备忘清单
RegEX正则表达式常用语法