主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
constraint a_b foreign key(Kno) references Key1
a_b约束名 , Kno外键 ,Key1 主键在的表
分insert , update ,alter 三大法则
insert 时 ,能插了主键的才能 插入 外键的
update时 ,主外键有相同的值时候,不能修改。没有时,主键可以改其他,外键可以改已经存在的主键值
delete时, 能 删除 外键的才能 删 主键的(有点倒过来的味道吧
约束的add 和 drop
alter table key2--消除了外键约束,上面的语句都可以执行 drop constraint K_k alter table key2 --通过这个把外键约束加回来,上面的语句又不可以用了 add constraint K_k foreign key(Kno) references key1
全部测试代码如下
create table key1( --定义两个表 Kno int primary key, Ksex char(5)) create table Key2( Kmo int primary key, Kno int, constraint K_k foreign key(Kno) references key1) insert --抛出错误,有外键,不能直接插入,要在主键那里先插入 into Key2 values(12,12) insert --现在先执行了这行,然后执行上面那行就没有问题了 into Key1 values(12,'b') update key2--修改无关的值,可以 set kmo=0 update key2--修改外键,不可以 set kno=2 update key1--修改主键,也不可以 set kno=2 alter table key2--消除了外键约束,上面的语句都可以执行 drop constraint K_k alter table key2 --通过这个把外键约束加回来,上面的语句又不可以用了 add constraint K_k foreign key(Kno) references key1 delete --删除主键是不可以 from key1 where kno='12' delete --删除外键的却可以 from key2 where kno='12'