SQL 语句审核规范

常见错误

1.have no comments

列必须要有注释!!!

2.Invalid default value for column

数据字段的默认值为数字,varchar类型的默认值一般为'',时间字段的默认值不允许为 0000-00-00 00:00:00 ,必须是 0000-01-01 00:00:00 !!!

3.is not allowed to been nullable

每个列都必须 not null (如果列为 BLOB/TEXT 类型的,则这个列不能设置为 NOT NULL )!!!

4.Merge the alter statement for table

存在多条对同一个表的修改语句,请合并成一个 ALTER 语句!!!

5.Set a primary key for table

表必须要有一个主键!!!

6.Set column xxx to VARCHAR type

char 长度大于 20 的时候需要改为 varchar !!!

7.Set comments for table

表必须要有注释!!!

8.Set Default value for column

每个列都需要定义默认值,除了自增列、主键列及大字段列之外!!!

9.Set unsigned attribute on auto increment column

自增列,必须使用无符号类型(unsigned)!!!

具体错误

插入语句检查项

  • 必须指定值列表,与上面对应的列,插入的值是什么,必须要指定
  • 插入列列表与值列表个数相同,上面二者的个数需要相同,如果没有指定列列表,则值列表长度要与表列数相同。
    例如: insert into test.student select name,course,score
    from test.student where 1=1
    (所有的 dml 操作都要加 where 条件)
  • 不为 null 的列,不能插入的值是 null

更新、删除语句检查项

  • 必须有 where 条件
  • delete 语句不能有 limit 条件
  • 不能有 order by 语句
  • 影响行数不能大于 1 万条(如果刷的数据太多,就要分批执行,特殊需求再另外处理)

表属性的检查项

  • 表名、列名、索引名的长度不大于 64 个字节

  • 如果建立的是临时表,则必须要以 tmp 为前缀

  • 表必须要有注释

  • 只能有一个自增列

  • 索引名字不能是 Primay

  • 不支持 Foreign key

  • 建表时, auto_increment 的值为 1 (不加这个参数就是默认为 1 )

  • 自增列的名字 id,并且没有业务逻辑

列属性的检查项

  • 不能设置列的字符集,统一为数据库默认字符集

  • 列的类型不能使用集合、枚举、位图类型

  • 列必须要有注释

  • char 长度大于 25 的时候需要改为 varchar

  • 每个列都使用 not null (如果列为 BLOB/TEXT 类型的,则这个列不能设置为 NOT NULL )

  • 自增列,则使用无符号类型

  • 自增列,则长度必须是 int bigint

  • timestamp 类型的,则要必须指定默认值

  • 每个列都需要定义默认值,除了自增列、主键列及大字段列之外

  • 时间字段的默认值不允许为 0000-00-00 00:00:00,可以是 2018-01-01 00:00:00 或者其他有特殊意义的值

索引属性检查项

  • 索引必须要有名字

  • 不能有外键

  • Unique 索引必须要以 uniq_ 为前缀

  • 普通索引必须要以 idx_ 为前缀

  • 索引的列数不能超过 5 个

  • 表必须要有一个主键

  • 单表不超过 20 个索引

  • 索引中的列,不能重复

  • BLOB 列不能建做 KEY

  • 索引长度不能超过766(如果超过,就要定义列长度),
    例如 alter table test add index idx_test(test(50))

默认值检查项

  • BLOB/TEXT 类型的列,不能有非 NULL 的默认值

  • 自增列不能设置默认值。

打赏作者

您将是第一位评论人!

提醒
avatar