我是innoDB的初学者,数据库不是很好。我对外键感到困惑。我只想知道的是:
请帮帮我,我对innoDB数据库中的外键引用很困惑。引导我走最简单的方法。感谢。
答案 0 :(得分:1)
假设外键约束已定义,由存储引擎支持并已启用(即MySQL变量foreign_key_checks = 1
,启用了Oracle外键约束而不是延迟等)。
问:如果删除PK(另一个表上的fk),子表上的FK是否也被删除了?
A:如果将DELETE规则指定为CASCADE,则父表上的删除也将对子表执行删除操作。如果将DELETE规则指定为RESTRICT,并且子表中有引用父键的行,则DELETE操作将引发错误。
( EDIT:为了完整起见,我们注意到“SET NULL”是UPDATE或DELETE规则的另一个选项。)
问:如果我通过引用父表中的行从子表中删除一行,那么父表中的行也会被删除吗?
A:否。删除子表中的行不会影响父表中的行。
问:如果我将新行插入父表,还会将一行添加到子表>
A:否。行不会自动插入子表。有一个父行没有引用它的任何子行是有效的(关系数据库)。
问:如果我将一行插入子表?
A:否。对子表的插入不会自动向父表插入行。 (将验证插入子表的外键列的任何非空值;数据库将验证父表中是否已存在具有匹配值的行。如果没有,则INSERT将失败,错误。)
问:如果我在子表中更新外键列的值,该怎么办。
A:与插入相同,新值将在更新操作进行之前得到验证。
问:如果更新父表中主键的值会怎样?
A:如果将外键的UPDATE规则指定为CASCADE
,则子表中的相关行也将更新,以保留行之间的关系。如果UPDATE规则为RESTRICT
,并且子表中存在相关行,则更新操作将引发错误。
外键旨在强制执行参照完整性。当外键列的新非空值未引用父级中的行时,它们基本上不允许子表中的插入/更新。
在外键约束上定义的UPDATE和CASCADE规则确定父表上的UPDATE和DELETE操作的行为。
答案 1 :(得分:0)
您所询问的是将更新/删除级联到子元素。
文档:http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
示例:
CONSTRAINT FOREIGN KEY (
{jobAbbr {1}} {ffxi_jobType {1}} {jobAbbr {1}}
“ON DELETE CASCADE”意味着当删除密钥时,所有FK都被删除,这对数据完整性非常有用。然而,这不是自动的。
删除外键不会删除基于任何一种方式的密钥。