- 使用小写字母并采用下划线分隔单词,例如:
user_profile
、order_details
。 - 表名和字段名应具有可读性并能明确表示含义,尽量避免使用缩写。
- 不要在表名和字段名中使用空格或特殊字符。
- 表名使用复数形式,字段名使用单数形式。
- 尽量避免使用保留字(如
select
、order
等)。
- 别名尽量简短但具有辨识度,且在必要时使用,避免滥用。
- 表和列的别名可以使用首字母简写或更简明的名称。
- 为了增强可读性,使用
AS
关键字显式指定别名。
- 约束(如主键、外键、索引)命名应清晰并包含表名和约束类型。例如:
- 主键:
pk_user_profile
- 外键:
fk_order_user_id
- 唯一约束:
uk_email
- 主键:
- 使用大写书写 SQL 关键字,如
SELECT
、INSERT
、UPDATE
、DELETE
等。 - 保持关键字大小写一致,便于阅读和维护。
- SELECT 语句中,每个字段、表名、WHERE 条件分行书写,并使用统一缩进。
- 多行
JOIN
、WHERE
、GROUP BY
、ORDER BY
等应按缩进分行排列。
- 在复杂查询中,尽量使用括号明确操作顺序,确保语句逻辑清晰。
- 左括号和内容同一行,右括号单独成行对齐。
- 避免使用
SELECT *
,而应明确列出需要的字段,便于代码阅读和减少数据传输量。 - 在查询中给表达式和计算字段添加别名,使查询结果更清晰。
- 条件分行书写并使用逻辑操作符(如
AND
和OR
)连接,每行一个条件。 - 将最可能筛选出数据的条件放在最前面,以提高查询效率。
- 按需求排序,尽量明确指定字段名称,避免
ORDER BY
索引号。 - 如果需要降序排列,使用
DESC
,不写ASC
,保持语句简洁。
- 优先选择内连接(
INNER JOIN
)和左连接(LEFT JOIN
)等明确的连接类型,不用隐式连接。 - 连接条件写在
ON
子句中,避免写在WHERE
子句中。
- 每个
JOIN
操作分行书写,便于清晰展示表与表之间的关系。 - 尽量按逻辑顺序从主要表连接到次要表。
- 在
INSERT
语句中,明确指定字段名,避免因表结构变化导致插入错误。 - 使用列名与值的对应关系,便于维护代码和提高代码可读性。
- 批量插入时,确保数据格式和顺序保持一致,以免数据插入错误。
- 必须包含
WHERE
子句,以避免更新整张表。 - 将条件分行书写,并清晰指定更新条件。
- 将更新内容放在
SET
子句中并对齐,便于阅读和修改。
- 必须包含
WHERE
子句,避免删除整张表的数据。 - 确保条件严格,以准确删除需要的数据。
- 使用
--
添加注释,适合单行注释。
- 使用
/* ... */
添加多行注释,适合描述复杂逻辑或操作流程。
- 注释应言简意赅,描述清楚复杂逻辑和目的,不写与代码内容重复的信息。
- 索引命名应包含表名和索引字段名,如
idx_user_email
。
- 为常用查询条件、JOIN 字段建立索引,提高查询效率。
- 避免在频繁更新的字段上建立索引。
- 使用
EXPLAIN
分析查询计划,优化查询性能。 - 减少不必要的查询字段和冗余数据操作,确保查询简洁高效。
- 在批量操作(如多次
INSERT
、UPDATE
或DELETE
)时,使用事务BEGIN
和COMMIT
保证数据一致性。
- 使用
ROLLBACK
处理错误时回滚事务,确保数据的完整性和一致性。
- 使用参数化查询或预编译语句,避免 SQL 注入风险。
- 最小化数据库用户权限,仅授予必要的权限,避免高权限用户的滥用。
- 不要使用
root
或管理员账户执行普通操作,降低风险。
- 对敏感数据进行加密存储,如密码字段采用哈希算法存储,确保数据安全。