gpt4 book ai didi

mysql - 外键变得复杂

转载 作者:行者123 更新时间:2023-11-29 12:58:12 25 4
gpt4 key购买 nike

我是innoDB的初学者,对数据库不是很好。我对外键感到困惑。我只想知道的是:

  • 如果我删除一个 PK(fk 在另一张 table 上)
    • 子表上的FK也被删除了吗?
    • 那么如果我删除子表上的 FK 怎么样?
    • 父表中的记录也被删除?
  • 此外,如果我向父表添加新记录
    • 还添加了子表吗?
    • 添加到子表怎么样?
    • 如果我更新数据怎么样?

请帮助我,我对 innoDB 数据库中的外键引用感到非常困惑。引导我找到最简单的方法。谢谢。

最佳答案

假设外键约束已定义、受存储引擎支持且已启用(即 MySQL 变量 foreign_key_checks = 1、Oracle 外键约束已启用且未延迟等)

问:如果我删除了一个PK(另一个表上的fk),子表上的FK也会被删除吗?

答:如果DELETE规则指定为CASCADE,那么父表的删除也会对子表执行删除操作。如果 DELETE 规则指定为 RESTRICT,并且子表中有引用父键的行,则 DELETE 操作将引发错误。

(编辑:为了完整起见,我们注意到“SET NULL”是 UPDATE 或 DELETE 规则的另一个选项。)

问:如果我从子表中删除引用父表中某行的行,父表中的该行是否也会被删除?

答:不会。删除子表中的行不会影响父表中的行。

问:如果我向父表插入新行,子表中是否也会添加一行>

答:不会。行不会自动插入到子表中。没有任何子行引用它的父行是有效的(关系数据库方面)。

问:如果我向子表插入一行?

答:不会。对子表的插入不会自动向父表插入行。 (将验证插入到子表的外键列的任何非空值;数据库将验证父表中是否已存在具有匹配值的行。如果不存在,则 INSERT 将失败并显示一个错误。)

问:如果我更新子表中外键列的值会怎样。

答:与插入相同,新值将在更新操作继续之前进行验证。

问:如果我更新父表中主键的值会怎样?

A:如果外键的UPDATE规则指定为CASCADE,那么子表中的相关行也会被更新,以保留之间的关系行。如果 UPDATE 规则为 RESTRICT,并且子表中存在相关行,则更新操作将引发错误。

<小时/>

外键旨在强制执行引用完整性。当外键列的新非空值不引用父表中的行时,它们基本上禁止在子表中插入/更新。

外键约束上定义的 UPDATE 和 CASCADE 规则决定了父表上的 UPDATE 和 DELETE 操作的行为。

关于mysql - 外键变得复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com