我有三张桌子。 Tab_1,Tab_2和Tab_3。 Tab_2和Tab_3取决于Tab_1。 Tab_1的PK_t1表示其余表中的FK(外键)。
现在我知道我必须更新PK_t1(主键)列。如果我更新主键列,那么子表(Tabl_2和Tab_3)的FK列也应该更新。
---------------------------------------------
Example
Tab_1
ID(PK)| Cal2 |
---------------|
101 | abc |
102 | acw |
103 | bhj |
Tab_2
----------------
Address| Cal2(FK_ID)
----------------
ljjkkl | 103
ghhj | 101
dfgjdl | 101
Tab_3
----------------
Cal1 | ID(FK_ID)
----------------
n233b | 101
g55hhj | 103
d867hh | 102
现在如果我想将表格Tab_1更新为
Tab_1
ID(PK)| Cal2 |
---------------|
951 | abc |
952 | acw |
953 | bhj |
此(更新)是否也会导致子表。
有可能吗?或者我应该采取什么必要的行动来实现这一目标。
提前致谢...!
答案 0 :(得分:0)
使用数据库引擎innodb并使用选项on update
创建表格,on delete
答案 1 :(得分:0)
这是外键关系级联更新的原因之一。有了它,您将能够更新Table1中的PK,它将自动传播到其子表。这种约束看起来像是:
Alter Table Table2
Add Foreign Key ( FK_ID )
References Table1( Id )
On Update Cascade
如果未启用Cascade Update,您有两种选择:
Begin Transaction
Insert Table1( Id, Cal2 )
Values( 951, 'Foo' )
Update Table2
Set FK_ID = 951
Where FK_ID = 101
Update Table3
Set FK_ID = 951
Where FK_ID = 101
...
Delete Table1 Where Id = 101
Commit Transaction
第二种方法的问题是没有新的ID值会与现有的PK值发生碰撞。