Skip to content

Latest commit

 

History

History
116 lines (97 loc) · 3.33 KB

practice.md

File metadata and controls

116 lines (97 loc) · 3.33 KB

最佳实践

自定义NOT NULL

参数

ENABLE_COLUMN_NOT_NULL

启用字段not null检查,设置为true后,会要求字段设置为not null

例子:

address varchar(128) not null default '' comment '地址'
ENABLE_COLUMN_TIME_NULL

时间类型字段允许设置为null。例如一些业务字段需要设置为允许为null,比如部分业务的时间字段不希望实现magic

例子:

finish_at datetime default null comment '完成时间'

允许为NULL的类型

  • text
  • blob
  • json

例子

remark text comment '备注'

审计字段

建表时必须要有创建时间更新时间, 该如何实现呢

参数

CHECK_TABLE_AUDIT_TYPE_COLUMNS

启用审计类型的字段, 必须定义2个审计字段,要求

  • DEFAULT CURRENT_TIMESTAMP
  • DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

例子

字段名和注释名不做要求

`UPDATED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
`CREATED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'

限制指定的表进行DDL/DML语法审核

一些特殊的场景,研发希望部分表不能提交DDL和DML工单,场景举例:

用户业务库:

  • 库:db_users
  • 表:tbl_users
  • 类型:主表
  • 业务读写该表

支付业务库:

  • 库:db_pay
  • 表:tbl_users
  • 类型:备表
  • 业务只读该表,数据和表结构从主表同步

上述场景下,我们可以配置db_pay.tbl_users禁止语法审核,可以保证对db_pay.tbl_users的DDL和DML操作无法提交,保证数据一致性。

"DISABLE_AUDIT_DDL_TABLES": [
      {
        "DB": "db_pay",
        "Reason": "限制审核和提交,请联系支付业务研发",
        "Tables": [
          "tbl_users"
        ]
      },
    ],
"DISABLE_AUDIT_DML_TABLES": [
  {
    "DB": "db_pay",
    "Reason": "限制审核和提交,请联系支付业务研发",
    "Tables": [
      "tbl_users"
    ]
  }
],

启用列类型变更兼容模式

tidb默认不支持数据类型变更,但是允许同一类型,不同长度变更且变更后的长度必须大于变更前的长度 允许操作: tinyint-> int、int->bigint、char->varchar ... 不允许操作:int -> tinyint、varchar -> char ...

控制参数

  • ENABLE_COLUMN_TYPE_CHANGE
  • ENABLE_COLUMN_TYPE_CHANGE_COMPATIBLE

应用场景

仅当参数ENABLE_COLUMN_TYPE_CHANGE=false时,ENABLE_COLUMN_TYPE_CHANGE_COMPATIBLE才生效

不允许修改数据类型:char -> int 、tinyint -> enum ... 允许操作:tinyint-> int、char->varchar ...

ENABLE_COLUMN_TYPE_CHANGE: false
ENABLE_COLUMN_TYPE_CHANGE_COMPATIBLE: true