我在列TEMP1.aa
(temp1中的主键)中插入数据,但它不会导入TEMP2.cc
列(TEMP2中的外键)。
为什么?
我认为如果在主键中插入数据它会自动插入到外键中!如果这是真的,如果我们插入主键,外键必须更新?答案 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
行。
如果您需要外表始终在主表中引用其对应的行,则可能是您可以将该表转换为其他列,因为它们是同一实体的属性。 此有例外情况,但详细说明只会增加您的困惑。