我刚刚开始学习SQL,所以我有点困惑。
如果我有一个具有主键的表A:CustomerID&表B具有外键CustomerID
我使用CASCADE添加了外键约束,以便在删除或更新主键时自动更新或删除外键。
但是,它仅适用于删除。当我在主字段表中添加新记录时,该记录未显示在外键表中,为什么会这样?
答案 0 :(得分:1)
在引用表中更新或删除相应的行 在父表中更新或删除该行时。级联 如果时间戳列是其中一部分,则无法指定 外键或引用的键。 ON DELETE CASCADE不能 为具有INSTEAD OF DELETE触发器的表指定。 ON UPDATE 无法为具有INSTEAD OF UPDATE的表指定CASCADE 触发器。
正如MSDN中提到的那样。他们提到主键表的唯一更新和删除操作会影响外键表的列。如果对主键进行任何插入,则不会影响外键。由于主键和外键关系的主要目标
“每个记录在外键表中都可用,它应该包含相应的记录,应该存在于primay密钥表中,反之亦然”。
如果向外键表插入任何记录,则会引发外部参照完整性错误。除非您在主键表中对应记录,否则它不允许您在外表中插入记录。
有关信息,请参阅以下MSDN链接
http://msdn.microsoft.com/en-us/library/ms179610.aspx
注意:
如果您想要实现此功能,那么您已在存储过程或触发器中编写逻辑。
答案 1 :(得分:0)
不,不是自动添加你的外键表,它没有意义,例如,如果你有两个表," City"和"人们" ,城市中的人,所以必须有FK推荐人,如果你在城市添加记录,例如纽约,数据库如何知道谁需要插入People表?有多少人? ,这个人的属性是什么?例如人名?
因此,数据库无法自动执行此操作,您必须手动执行此操作!