跳到主要内容

SQL 开发规范一览表

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

分类规则名称MySQLSQL
Server
Postgre
SQL
OracleOB
Oracle
DB2Mongo
DB
RedisDorisSelect
DB
达梦DWSTiDBGreat
SQL
ADB
Postgre
SQL
GBaseTDSQL
MySQL
Oceanbase
MySQL
GoldenDBMariaDBVastbaseGaussDBopenGaussElastiCachePegaDBkingbasekingbaseoracle
限制自增列名字为 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语句检测表是否存在✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️