约束定义在列上,限制了列里存储的值。当尝试在该列上写入或更新为违反约束定义的值时,会触发一个错误并回滚这个操作;当尝试在已有的表的列上加上一个跟现有数据相冲突的约束时,也会触发一个错误并回滚这个操作。

    约束的类型有:

    • 非空约束(NOT NULL),不允许约束包含的列的值包含 NULL。

      如 ware 表的 w_name 列类型后面有 not null 约束,表示业务约束每个仓库必须有个名称。有非空约束的列,在 INSERT 语句中必须指明该列的值,除非该列还定义了默认值。如 cust 表的列 c_discount 定义了默认值 0.99,即业务上每个人默认折扣是 0.99。

    • 主键约束(PRIMARY KEY),是 NOT NULL 约束和唯一约束的组合。

      如 ware 表和 cust 表都有个主键 w_id 和 c_id ,这两列不允许为 NULL 并且必须是不重复的。

    • CHECK 约束,要求数据库中某列的值符合指定的条件。

    外键约束和 CHECK 约束可以被启用或禁用,通过命令 控制。默认情况下,约束创建后状态是启用的。

    OceanBase 数据库默认是开启外键约束的,通过租户变量 foreign_key_checks 控制。

    当列上有 NOT NULL 约束时,通常建议设置默认值。当列类型是日期或时间类型时,可以设置默认值为数据库当前时间。