SQL规范配置 本文介绍SQL规范功能,DMS会对用户在查询窗口、SQL变更等模块中提交的SQL语句进行规范审核,符合规范要求的才可执行,这样可以提前识别一些错误或者不规范的SQL,降低异常SQL对数据库造成的风险。 前提条件 时间字段分区表须确定生命周期制定规则和数据清理表 新建索引需要加参 数initrans 时间字段分区表须确定生命周期制定规则和数据清理表 时间字段分区表须确定生命周期制定规则和数据清理表 规则类型 适用的数据库 适用的SQL语句 规则名称 在线/离线规则 库 MySQL、PostgreSQL CREATE DATABASE 限制创建库的字符集 离线 库 Oracle CREATE DBLINK 禁止所有用户拥有创建dblink权限 离线 表 MySQL、PostgreSQL、Oracle CREATE TABLE 表要有主键 离线 表 MySQL、PostgreSQL CREATE TABLE 表要有备注 离线 表 MySQL、PostgreSQL CREATE TABLE 限制表名大小写 离线 表 MySQL CREATE TABLE 限制表存储引擎 离线 表 MySQL、PostgreSQL CREATE TABLE 禁止使用分区表 离线 表 MySQL、PostgreSQL、Oracle CREATE TABLE 表要包含哪些列 离线 表 MySQL CREATE TABLE 限制表字符集 离线 表 MySQL、PostgreSQL、Oracle CREATE TABLE 表名不能是关键字 离线 表 MySQL、PostgreSQL、Oracle CREATE TABLE 限制表字段数量 离线 表 Oracle CREATE TABLE 新建表表名不能带有日期格式 离线 表 Oracle CREATE TABLE 建表时指定表空间名字前缀不能为关键字 离线 表 Oracle CREATE TABLE 时间字段分区表须确定生命周期制定规则和数据清理表 离线 表 Oracle CREATE TABLE 表名中带关键字的表必须进行分区 离线 表 Oracle CREATE TABLE 新建表需要加参数initrans 离线 列 MySQL、PostgreSQL、Oracle CREATE TABLE 字段名不能是关键字 离线 列 MySQL、PostgreSQL CREATE TABLE 限制字段名大小写 离线 列 MySQL CREATE TABLE 不能设置列的字符集 离线 列 MySQL、PostgreSQL、Oracle CREATE TABLE 限制列不能使用部分数据类型 离线 列 MySQL、PostgreSQL CREATE TABLE 列要有注释并限制长度 离线 列 MySQL、PostgreSQL、Oracle CREATE TABLE 限制char类型字段长度 离线 列 MySQL、PostgreSQL、Oracle CREATE TABLE 限制varchar类型字段长度 离线 索引 PostgreSQL CREATE INDEX 建议以create index concurrently方式创建索引 离线 索引 MySQL、PostgreSQL CREATE TABLE 限制单表中索引数量 离线 索引 Oracle CREATE INDEX 索引命名必须以关键字命名 离线 索引 Oracle CREATE INDEX 索引创建必须显式指定表空间,且指定的表空间为数据表空间 在线 索引 Oracle CREATE INDEX 索引创建不能nologging 离线 索引 Oracle CREATE INDEX 分区表创建的索引必须为LOCAL类型 在线 索引 Oracle CREATE INDEX 索引的表空间名称必须以关键字开头 离线 索引 Oracle CREATE INDEX 新建索引需要加参数initrans 离线 更新 MySQL、DRDS UPDATE/DELETE update/delete语句限制多表关联的数量 离线 更新 MySQL、DRDS、PostgreSQL UPDATE/DELETE update/delete语句建议指定where条件 离线 更新 MySQL、DRDS、PostgreSQL UPDATE/DELETE update/delete语句检测where条件是否包含子查询 离线 更新 MySQL、DRDS UPDATE/DELETE update/delete语句不能有order by子句 离线 更新 MySQL、DRDS、PostgreSQL UPDATE/DELETE update/delete语句检测涉及表/字段是否存在 在线(检测该规则需连接数据库实例) 更新 MySQL、DRDS、PostgreSQL UPDATE/DELETE 限制某些表UPDATE/DELETE单个语句的总影响行数 在线(检测该规则需连接数据库实例) 更新 MySQL、DRDS、PostgreSQL UPDATE/DELETE update语句检测是否更新了主键 在线(检测该规则需连接数据库实例) 更新 PostgreSQL UPDATE/DELETE update语句检测是否更新了唯一键 离线 更新 DRDS UPDATE/DELETE 禁止使用truncate table语句 离线 更新 DRDS UPDATE/DELETE update/delete语句不能带limit条件 离线 写入 MySQL、DRDS、PostgreSQL INSERT 插入语句建议指定insert字段列表 离线 写入 MySQL、DRDS、PostgreSQL INSERT 插入语句中insert字段名不能重复 离线 写入 MySQL、DRDS、PostgreSQL INSERT 插入语句中insert字段列表要和值列表匹配 离线 写入 MySQL、DRDS、PostgreSQL INSERT 插入语句限制一条insert values的总行数 离线 写入 MySQL、DRDS、PostgreSQL INSERT 插入语句检测insert的表/字段是否存在 在线(检测该规则需连接数据库实例) 写入 PostgreSQL INSERT 插入语句不能为not null列插入null值 在线(检测该规则需连接数据库实例) 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议group by或order by表达式或函数 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议order by多个字段使用不同方向排序 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议使用having子句 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议使用order by rand() 离线 查询 MySQL、DRDS、PostgreSQL、Oracle SELECT select语句不建议使用select 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议使用union 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句不建议对不同的表group by或order by 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句建议指定where条件 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句限制limit的offset大小 离线 查询 MySQL、DRDS、PostgreSQL SELECT select语句限制多表关联的数量 离线 查询 MySQL、DRDS SELECT 多表关联的select语句建议指定where条件 离线 查询 PostgreSQL SELECT 多表关联的select语句建议指定关联条件 离线 对象 PostgreSQL CREATE 对象名称禁止包含中文 离线 对象 PostgreSQL CREATE 对象名称禁止以pg、pgxc、sys、或者数字开头 离线 对象 PostgreSQL CREATE 对象名称禁止使用双引号 离线 对象 PostgreSQL CREATE 限制对象名长度 离线 对象 PostgreSQL CREATE 禁止使用触发器 离线 对象 PostgreSQL CREATE 禁止使用函数 在线(检测该规则需连接数据库实例) 对象 PostgreSQL CREATE 禁止使用存储过程 离线 对象 Oracle CREATE 新建序列需要设置cache 离线 系统 PostgreSQL ALTER 禁止关闭autovacuum 离线 语句 PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 禁止在where条件中使用前缀是%的like语法 离线 语句 PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 使用IS NULL判断是否为NULL值 离线 语句 PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 禁止在where条件中使用<>或者!操作符 离线 语句 PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 不建议使用cascade 离线 语句 MySQL、DRDS、PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 where条件中不建议使用反向查询(not in/not like) 离线 语句 MySQL、DRDS、PostgreSQL 包含WHERE条件子句的SELECT、UPDATE、DELETE语句等 where条件中检测是否通过“or”操作符连接过滤条件 离线 用户需要具有进入SQL规范 界面的菜单权限。菜单权限请参考权限说明。 SQL规范为企业版功能,目前支持MySQL、PostgreSQL、DRDS、Oracle三种数据库类型。