Bytebase 成为 CNCF Landscape 上第一个聚焦在 Database CI/CD 领域的项目 现在查看

SQL 审核规则

SQL 审核规则在线生成工具

进阶模板

为您的数据库提供全面保护和最佳实践。

基础模板

保证变更可正确地应用到数据库。

数据库

只有当数据库内没有表时,才可以被删除。

    系统

    • 允许的字符集:
      utf8mb4

    • 允许的规则限制:
      utf8mb4_0900_ai_ci

    强制要求表中必须包含某些字段。

    • 必须包含的字段名:
      id created_ts updated_ts creator_id updater_id

    为字段设置类型黑名单。

    • 禁止的类型:
      JSON

    表中的字段不允许存在 NULL 值。

      不允许改变字段的类型。

        不允许为 NULL 的字段必须设定默认值。

          不允许 "CHANGE COLUMN" 语句。

            不允许列的顺序变更。

              禁止为字段设置字符集。

                配置字段是否需要注释和最大注释长度。

                • 必须注释: true
                • 长度限制: 64

                CHAR 长度大于指定值的时候需要改为 VARCHAR 类型。

                • 最大长度: 20

                配置自增字段的初始值。

                • 初始值: 1

                限制列默认值或 ON UPDATE 值为 NOW(), CURRENT_TIME() 和 CURRENT_TIMESTAMP() 的数量。

                  Schema

                  MySQL 和 TiDB 支持检测 schema 变更是否向后兼容。

                    要求每张表必须有一个主键。

                      禁止给表创建外键。

                        只有符合命名规范的表才可以被删除,通过强制用户在删除前重命名来避免误删。默认情况下待删除表名必须以 "_del" 结尾。

                        • 命名规则(正则): _del$

                        配置表是否需要注释和最大注释长度。

                        • 必须注释: true
                        • 长度限制: 64
                        语句

                        不允许使用 "SELECT *" 语句。

                          必须使用 "WHERE" 语句。

                            WHERE 语句中禁止使用左模糊匹配,例如禁止 LIKE foo = '%x'。

                              禁止在工单中使用提交。

                                在 INSERT, UPDATE, DELETE 语句中禁止使用 "LIMIT"。

                                  在 UPDATE, DELETE 语句中禁止使用 "ORDER BY"。

                                    禁止在工单中对同一张表使用多个 "ALTER TABLE" 语句。

                                      必须指定插入的字段,也就是要写入哪些列,如 "INSERT INTO t (id,name) VALUES(...)"。

                                        • 最大插入行数: 1000

                                        限制 "DELETE" and "UPDATE" 语句影响的行数。

                                        • 最大影响行数: 1000

                                        使用 EXPLAIN 语句试运行 DML。

                                          命名

                                          限制表名命名风格和长度,默认为小写字母_下划线,且不超过 63 个字符。

                                          • 表命名规则(正则): ^[a-z]+(_[a-z]+)*$
                                          • 长度限制: 63

                                          限制列名命名风格和长度,默认为小写字母_下划线,且不超过 63 个字符。

                                          • 列命名规则(正则): ^[a-z]+(_[a-z]+)*$
                                          • 长度限制: 63

                                          限制唯一键命名风格和长度,默认为 uk_<表名>_<主键包含的字段名组合> 或空,且不超过 63 个字符。

                                          • 唯一键命名规则: ^$|^uk_{{table}}_{{column_list}}$
                                          • 长度限制: 63

                                          限制主键命名风格和长度,默认为 pk_<表名>_<主键包含的字段名组合> 或空,且不超过 63 个字符。

                                          • 主键命名规则: ^$|^pk_{{table}}_{{column_list}}$
                                          • 长度限制: 63

                                          限制索引命名风格和长度,默认为 idx_<表名>_<索引包含的字段名组合> 或空,且不超过 63 个字符。

                                          • 索引命名规则: ^$|^idx_{{table}}_{{column_list}}$
                                          • 长度限制: 63

                                          限制外键命名风格和长度,默认为 fk_<目标表名>_<目标字段名>_<被引用表名>_<被引用字段名> 或空,且不超过 63 个字符。

                                          • 外键命名规则: ^$|^fk_{{referencing_table}}_{{referencing_column}}_{{referenced_table}}_{{referenced_column}}$
                                          • 长度限制: 63

                                          限制自增列命名风格和长度,默认为 id ,且不超过 63 个字符。

                                          • 自增列命名规则(正则): ^id$
                                          • 长度限制: 63
                                          索引

                                          限制主键类型必须是 INT 或 BIGINT。

                                            • 字段数量上限: 5

                                            • 索引数量上限: 5
                                            引擎

                                            强制要求使用 InnoDB 作为 MySQL 的储存引擎。

                                              Made by Bytebase at 2022-12-07