【问题标题】:Foreign Key Tables Updates外键表更新
【发布时间】:2014-06-18 05:04:19
【问题描述】:

我刚开始学习 SQL,所以我有点困惑。

如果我的表 A 有一个主键:CustomerID & Table B with Foreign key CustomerID

我通过使用 CASCADE 添加了外键约束,以便在删除或更新主键时,外键应该自动更新或删除。

但是,它仅适用于删除。当我在主字段表中添加一条新记录时,该记录没有显示在外键表中,这是为什么?

【问题讨论】:

标签: mysql sql sql-server constraints


【解决方案1】:

引用表中相应的行被更新或删除 当该行在父表中更新或删除时。级联 如果时间戳列是 外键或引用的键。 ON DELETE CASCADE 不能 为具有 INSTEAD OF DELETE 触发器的表指定。在更新 不能为具有 INSTEAD OF UPDATE 的表指定 CASCADE 触发器。

正如 MSDN 中提到的那样。他们提到只有主键表的更新和删除操作会影响外键表的列。如果对主键进行任何插入,则不会影响外键。由于主键和外键关系中的主要目标

“每条记录都在外键表中可用,它应该包含对应的记录应该存在于主键表中,反之亦然不适用”。

如果您在外键表中插入任何记录,则会引发外引用完整性错误。它不允许您在外部表中插入记录,除非并且直到您将在主键表中对应记录。

有关信息,请查看以下 MSDN 链接

http://msdn.microsoft.com/en-us/library/ms179610.aspx

注意:

如果你想实现这个功能,那么你已经在存储过程或触发器中编写了一个逻辑。

【讨论】:

    【解决方案2】:

    不,不是自动添加到你的外键表中,这是没有意义的,例如,如果你有两个表,“城市”和“人”,城市中的人,所以必须有一个 FK 引用 People ,如果您在城市中添加记录,例如纽约,数据库如何知道谁需要插入到 People 表中?有多少人? ,这个人的属性是什么?例如人名?

    所以数据库不能自动完成,你必须手动完成!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多