约束
① not null 用于指定某列的值不为空,即不可以为null
② unique 用于指定某列唯一,可以多个null
③ primary key 用于指定某列为主键,唯一且不为null,一个表只有一个主键,且建议设计主键。主键建好后会自动创建索引。
④ check 用于强制限制数据需要满足的条件
⑤ references/foreign key 用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须具有主键约束或是unique 约束,在添加从表数据时外键指向主表的数据必须存在,或者将从表的外键列置null。建表时需要先建主表再建从表。
修改约束
添加非空
alter table 表名 modify 列名 not null;
添加其他约束
alter table 表名 add constraint 约束名 约束(列名)
举例:
alter table customer add constraint un_id unique(cardId); -- 唯一
alter table customer add constraint ch_address check(address in ('山东','成都'));
删除约束
alter table 表名 drop constraint 约束名称 [cascade]
举例:
删除主键,删除主键比较特殊,可直接使用 primary key 因为一张表里只有一个主键,可不用是使用主键名称。其他约束
alter table customer drop constraint primary key;
列级定义和表级定义
列级定义为我们常用的约束定义方式,即在定义字段的同时定义约束。
形式如下:
create table 表名(
列名1 类型 约束,
列名2 类型 约束
...
);
表级定义则是我们在定义完字段名和类型后再统一定义约束,定义复合主键时必须使用表级定义。避免使用复合主键。
形式如下:
create table 表名(
列名1 类型,
列名2 类型,
....
constraint 约束名 约束(列名)
);