跳到主要内容

SQL 开发规范一览表

NineData 提供 SQL 开发规范,方便在企业多人协作开发的场景下提供安全管控,确保企业数据库的安全。本文提供当前支持的 SQL 开发规范一览表,以及规范支持的数据源类型。

分类规则名称MySQLSQL
Server
Postgre
SQL
OracleOB
Oracle
DB2Mongo
DB
RedisDorisSelect
DB
达梦DWSTiDBGreat
SQL
ADB
Postgre
SQL
GBaseTDSQL
MySQL
Oceanbase
MySQL
GoldenDBMariaDBVastbaseGaussDBopenGaussElastiCachePegaDB
**限制自增列名字为 ID**✔️✔️✔️✔️✔️✔️✔️✔️
**限制自增列为无符号**✔️✔️✔️✔️✔️✔️✔️
**限制 CHAR 类型字段长度**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制字段名大小写**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**字段名不能是关键字**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制列要有注释**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制列要有默认值**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制列不可空(NOT NULL)**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制列不能使用部分数据类型**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**不能设置列的字符集**✔️✔️✔️✔️✔️✔️✔️
**不能设置列的校对集**✔️✔️✔️✔️✔️✔️✔️✔️
**限制 VARCHAR 类型字段长度**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**分区键为CHAR、VARCHAR类型时长度限制**✔️
**分区键的字段类型**✔️✔️
**不建议索引字段是VARCHAR类型时其长度大于阈值**✔️
**字段危险操作管控**✔️✔️✔️✔️✔️
表(DDL)**限制表字段的数量**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**修改表字符集建议用 ALTER TABLE CONVERT 语法**✔️✔️✔️✔️✔️✔️✔️
**限制表字符集**✔️✔️✔️✔️✔️✔️✔️
**限制表校验规则**✔️✔️✔️✔️✔️✔️✔️
**限制表名大小写**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**表名不能是关键字**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制表必须注释**✔️✔️✔️✔️✔️✔️✔️✔️✔️
**表要有主键**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制表不能使用外键**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**OnlineDDL:大表结构变更风险检测**✔️✔️✔️
**表需要包含某些列**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制表存储引擎**✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制建表自增初始值**✔️✔️✔️✔️✔️✔️✔️✔️
**同一张表的多条 ALTER 语句建议合为一条**✔️✔️✔️✔️✔️✔️✔️
数据库**限制库的字符集**✔️✔️✔️✔️✔️✔️✔️
更新**UPDATE/DELETE 语句建议指定 WHERE 条件**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE/DELETE 语句不能有 ORDER BY 子句**✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 多表时检测 SET 的列是否指定表前缀**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句不建议更新表上的“创建时间”列**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句检测是否更新了主键**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句建议更新表上的“修改时间”列**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句检测 SET 多个列之间的分隔符( AND 非法)**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句检测表/字段是否存在**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE 语句检测是否更新了唯一键**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE/DELETE 语句必须使用索引**✔️✔️✔️✔️✔️✔️✔️
**限制 UPDATE/DELETE 单个语句总影响行数**✔️✔️✔️✔️✔️✔️✔️✔️
**OnlineDML:大表数据变更风险检测**✔️✔️✔️
**UPDATE不可以更新表上的分区键**✔️✔️
对象**字段禁用 Zerofill 属性**✔️✔️✔️✔️✔️✔️✔️
**禁止事件相关操作**✔️✔️✔️✔️✔️✔️✔️
**禁止自定义函数相关操作**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**禁止存储过程相关操作**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**禁止触发器相关操作**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**禁止视图相关操作**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
索引**限制表索引数量**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**索引需要设置名称**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制普通索引名格式**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制主键列必须自增**✔️✔️✔️✔️✔️✔️✔️✔️
**限制主键包含列的个数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制主键列类型**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制单个索引包含列的个数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制唯一索引名格式**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**索引名称不允许重复**✔️✔️✔️✔️✔️✔️✔️
**分区键对应字段必须在主键、唯一键中**✔️✔️
**检查DDL语句中可能存在的冲突**✔️
写入**INSERT 语句字段名不能重复**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT 语句字段列表和值列表要匹配**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT 语句建议指定 INSERT 字段列表**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT 语句不能为 NOT NULL 列插入 NULL 值**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT 语句不建议使用 SYSDATE() 函数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 INSERT 语句一条 INSERT VALUES 的总行数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT 语句检测 INSERT 的表/字段是否存在**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**INSERT/REPLACE必须指定分区键**✔️✔️
**分区键不可写入中文**✔️
查询(DQL)**SELECT 时不建议 GROUP BY 常量**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 SELECT 语句多表关联的数量**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句建议包含 WHERE 条件**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 SELECT 语句 LIMIT 的 OFFSET 大小**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议对不同的表 GROUP BY 或 ORDER BY**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议对常量进行 ORDER BY**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议 ORDER BY 多个字段使用不同方向排序**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议使用 ORDER BY RAND()**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议使用 HAVING 子句**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议使用 UNION**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 WHERE 条件中 IN 子句包含元素个数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**WHERE 条件中不建议使用前通配符查找**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**WHERE 条件中不建议索引字段包含数学运算或函数运算**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**WHERE 条件中不建议使用反向查询(NOT IN / NOT LIKE)**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**WHERE 条件中检测没有通配符的 LIKE 语句**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议 GROUP BY 或 ORDER BY 表达式或函数**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句不建议使用 ***✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT语句不建议嵌套多层子语句**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**SELECT 语句必须使用索引**✔️✔️✔️✔️✔️✔️✔️
**禁止使用非分区键对分片表进行关联**✔️✔️
**WHERE 条件中建议带上分区键**✔️✔️
查询/变更**WHERE 条件中检测字段是否存在隐式类型转换**✔️✔️✔️✔️✔️✔️✔️✔️
**WHERE 条件中检测是否通过 OR 操作符连接过滤条件**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
表(DML)**UPDATE/DELETE 语句检测 WHERE 条件是否包含子查询**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 UPDATE/DELETE 语句 LIMIT 数据量大小**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**UPDATE/DELETE 语句检测多表关联语法是否完整(JOIN 遗漏 ON 子句)**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
**限制 UPDATE/DELETE 语句多表关联的数量**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
查询(DML)**禁止对 WHERE 条件的分区键进行数学运算和函数运算**✔️✔️
-**SQL类型风险管控**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
删除**DELETE语句检测表是否存在**✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️