五.PRIMARY KEY ---- 主键约束
主键可以是单个字段,也可以是多个字段的组合。主键约束其实是UNIQUE和NOT NULL约束的组合,即主键必须是唯一,且各字段都是NOT NULL的。
1.创建测试表
create table tbl_primary( a int not null, b int, c int, constraint pk_tbl_primary_a_b primary key (a,b) );
其中(a,b)是组合主键,即a和b的组合必须是唯一的,且a是not null,b也是not null的,虽然表定义中没有明确b是not null的,但是因为b是主键的一部分,增加主键时会给b增加not null约束。
测试例
test=# insert into tbl_primary (a,b,c) values (1,1,1); INSERT 0 1 test=# insert into tbl_primary (a,b,c) values (1,2,1); INSERT 0 1 test=# insert into tbl_primary (a,b,c) values (1,1,1); ERROR: duplicate key value violates unique constraint "pk_tbl_primary_a_b" DETAIL: Key (a, b)=(1, 1) already exists. test=# insert into tbl_primary (a,c) values (1,5); ERROR: null value in column "b" violates not-null constraint DETAIL: Failing row contains (1, null, 5).
2.删除主键约束
test=# alter table tbl_primary drop constraint pk_tbl_primary_a_b ; ALTER TABLE
3.增加主键约束
向已存在的表中增加主键约束就必须考虑已存在的数据不是唯一的,或者有可能是NULL,此时增加主键约束就会失败,所以增加主键约束之前先删除这些脏数据。
如果你看了前一节增加唯一约束前删除脏数据,那么这一节简直就是小kiss。
对主键来说脏数据包括2个部分:NULL和重复数据,删除NULL数据比较简单,使用下面的SQL语句即可