为什么外键不更新?

时间:2011-03-13 20:09:34

标签: mysql sql foreign-keys

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

为什么?

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

3 个答案:

答案 0 :(得分:4)

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

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

参考:

答案 1 :(得分: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)上的外键确保Sales中的每个Fruit值必须与Fruits中的ID匹配。不是,问你的问题

  

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

所以我们在Fruits中插入一条记录(ID:4,Name:Pear)。您想将其导入Sales吗?怎么样?

阅读有关外键的一些基础知识

答案 2 :(得分:0)

不,外键不能那样工作。

外键用于通过密钥将两个表链接在一起。在一个表中,您拥有PRIMARY KEY以及与该实体相关的所有属性。

在另一张桌子上,你有FOREIGN KEY告诉数据库“嘿,你,用户,你只能在这里插入一个值,如果它在我的PRIMARY KEY中也存在参考表“

用户还可以选择是否要在外表中INSERT行。


如果您需要外表始终在主表中引用其对应的行,则可能是您可以将该表转换为其他列,因为它们是同一实体的属性。 有例外情况,但详细说明只会增加您的困惑。