外键

一:首先是外键的定义

如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。

二:主键表和外键表的理解

(1)以公共关键字作主键的表为主键表(父表,主表)

(2)以公共关键字作外键的表为外键表(从表,外表)

外键的作用:保证数据的完整性和一致性。

主键、外键和索引的区别

mysql 主键设置外键 可以 mysql数据库主键外键_mysql 主键设置外键 可以

CASCADE:级联

什么是级联操作:
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除

(1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。
(2)删除主键表时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除关联表中的记录,并不影响主键表中的数据,你查询主键表也能正确查询。所以删除外键表中的数据并不影响主键表。

NO ACTION(非活动,默认)、RESTRICT:约束/限制

当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)

SET NULL

当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(一样是外键表约束主键表,不过这就要求该外键允许取null)。

NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。