MySQL添加外键的方法
为book表添加外键:
《1》明确指定外键的名称:
语法:alter table 表名 add constraint 外键的名称 foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
alter table book add constraint FK_BOOK foreign key(pubid) references pub_com(id) on delete restrict on update restrict;
《2》不指定外键的名称,mysql会自动为你创建一个外键名称:alter table book add foreign key(pubid) references pub_com(id) on delete restrict on update restrict;
使用:show create table book;命令可查看
自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?
很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN KEY...REFERENCES修饰符添加一个ON
DELETE
或ON UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务
关键字 含义
CASCADE 删除包含与已删除键值有参照关系的所有记录
SET NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
RESTRICT 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
NO ACTION 啥也不做
请注意,通过ON UPDATE 和 ON
DELETE
规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,
例如:如果一系列的表通过外键关系和ON
DELETE
CASCADE 规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.