1. 主键在表中是唯一性的,并且主键所在的字段不能为空,且一个表中,只有一个主键或一个联合主键。
2. 当一个表引用外键时,被引用的表中字段必须是主键或unique
3. 如果要删除表中数据,但是表中的某个主键又被其他的表当做外键使用了,那么可以删除表中主键(要加cascade关键字),然后再删除数据,当主键被删除后,其他表中引用的外键自动被删除。
4.当主键被被其他的表当外键使用后,子表中数据被删除后,主表中不能使用truncate操作,只能使用delete进行操作删除数据。
5. 在给表加外键时,最好是清空该表中数据,否则当主表中没有外键中对应的值时,添加外键将会失败。
6. 主键一旦被其他表当外键引用,如果要删除主键,要么级联删除,要么先删除或禁用子表外键约束,再删除主键。
alter table tablename add constraint pk_name foreign key (col_name) references ta_name (col_name) --添加外键
ALTER TABLE TA ADD CONSTRAINT F_TA PRIMARY KEY (ID) --添加主键
ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME
--删除约束,当这个约束为主键时,恰好这个主键又被其他表当外键使用,那么只能先删除其他表中的外键,才能删除这个主键约束。
ALTER TABLE N ADD CONSTRAINT F_N FOREIGN KEY (ID) REFERENCES TA (ID) ON DELETE CASCADE;
当删除TA表中的数据时,N表中的数据自动被删除。只能使用delete删除TA表中数据。
alter table ta drop CONSTRAINT F_TA CASCADE
--当一个表中的主键被当做外键引用后,无法直接删除表中主键,需要使用级联的方式删除主键,cascade 关键字可以达到级联删除的目的
此外,在oracle中,字段上加上unique关键字,表示这个字段中可以为null值且非null值部分具有唯一性,但是在DB2中,在建表时给字段添加
unique关键字时,必须加上not null,否则建表时会报下面错误:
DB2 Database Error: ERROR [42831] [IBM][DB2/NT] SQL0542N The column named "column_name" cannot be a column of a primary key or unique key constraint because it can contain null values. SQLSTATE=42831