2011-03-13 84 views
0

我在列TEMP1.aa(temp1中的主键)中插入数据,但它不会导入到TEMP2.cc列(TEMP2中的外键)中。为什么外键不会更新?

为什么?

我想如果在主键中插入数据它会自动插入到外键!如果这是真的,如果我们插入一个主键,外键必须更新?

+3

我不认为你了解外键都读了。 – BoltClock 2011-03-13 20:10:50

+0

除非你有某种类型的触发器设置,只是因为某些东西是外键并不意味着它会自动更新。 – 2011-03-13 20:12:09

回答

4

外键不会更新子引用,它只能确保存储在列中的值已经存在于父表中。

但是,MySQL通过将TEMP1表中的外键约束添加ON UPDATE CASCADE来支持级联更新。否则,您需要考虑使用触发器来制定更详细的规则/要求。

参考:

+0

与问题相切。 UPDATE CASCADE与问题 – RichardTheKiwi 2011-03-13 20:17:18

+0

@Richard aka cyberkiwi中的INSERT操作无关:如果插入(意思是添加新的父表数据),则不会有子引用进行更正。检查OPs问题的编辑历史,你会发现英语不是他们的母语。 – 2011-03-13 20:22:57

0

不,外键不喜欢这样的工作。

外键用于通过键将两个表链接在一起。在一张桌子上,您有PRIMARY KEY以及与该实体有关的所有属性。

在其他表,你有告诉数据库FOREIGN KEY“嘿,你的用户,你只能在此插入一个值,如果它也存在在我的参考表一PRIMARY KEY

如果您想要在您的外部表中连续排列INSERT,您仍然可以根据自己的意愿选择。


如果需要外部表始终有一行引用其在主表的通讯员,有机会,你可能该表转换为附加列,因为它们的属性相同的实体。 这个也有例外,但详细说明会增加您的困惑。

1

考虑这些表

Fruits 
ID Name 
1 Apple 
2 Orange 
3 Grapes 

Sales 
ID Fruit Amount 
1 1  2.45 
2 3  1.23 
3 1  2.23 
4 2  6.22 

Sales(Fruit) to Fruits(ID)外键确保了每个销售水果的值必须从水果的ID相符。不,你的问题

我在列aa(主键在temp1中)插入数据,但它不会导入到TMP2.cc列(temp2中的外键)。

因此,我们在水果(ID:4,名称:梨)中插入记录。你想把它导入销售?怎么样?

关于外键的一些基础知识