noob qn关于更新级联

时间:2012-10-30 03:37:03

标签: mysql foreign-keys

如果我有两个表tableinfo和tablenamelist,那么外键如下:

Alter tableinfo add foreign key (name) references tablenamelist(name) on update cascade;

在哪些情况下会修改记录?

我的理解是,如果我在tablenamelist中将'bob'更改为'Bobby',它会在tableinfo中将'bob'的所有实例更新为'Bobby'。 如果我在tableinfo表中更改名称会发生​​什么?如果我将记录从'bob'更改为'tim',它会改变tableinfo中的记录吗?或者它只是将该记录重新分配给新名称?

1 个答案:

答案 0 :(得分:1)

您的第一个假设是正确的,如果您更改tablenamelist中的名称,它将在表tableinfo中更改。

您的第二个假设不正确,如果您尝试将表tableinfo中的名称更改为表tablenamelist中不存在的内容,则会收到外键违规。

外键是一种约束,它强制在外表中存在键。

来自Foreign key

  

在关系数据库的上下文中,外键是一个引用   两个表之间的约束。

同样来自14.3.5.4. FOREIGN KEY Constraints

  

InnoDB拒绝任何尝试创建的INSERT或UPDATE操作   如果没有匹配项,则子表中的外键值   父表中的候选键值。