我有三张桌子。 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   |

这个(更新)是否也会导致子表。

可能吗? 或者我应该采取哪些必要的措施来实现这一目标。

提前致谢...!

#1楼 票数:0

使用数据库引擎innodbon updateon delete on update创建带有选项的表

有关外键约束,请参见此处

#2楼 票数:0 已采纳

这是关于外键关系进行层叠更新的原因之一。 这样,您将能够更新Table1中的PK,它将自动传播到其子表。 该约束看起来像:

Alter Table Table2
    Add Foreign Key ( FK_ID )
        References Table1( Id )
        On Update Cascade

如果未启用Cascade Update,则有两个选择:

  1. 禁用所有外键约束,更新表1中的PK,更新子表,然后重新创建外键约束。
  2. 使用所需的ID将新值添加到Table1中,然后在子表上运行更新。 例如,如果要将PK值101更改为951:

    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值冲突。

  ask by Gnanendra translate from so

未解决问题?本站智能推荐:

1回复

如何更新是否存在或插入

我试图更新一行,或者如果不存在则将其插入。 但是,由于我没有使用唯一列,因此无法INSERT ON DUPLICATE KEY UPDATE 。 INSERT INTO table (id, user, date, points) VALUES (1, 1, '2017-03-03',
2回复

是否有MySQL关闭更新?

我有一张没有主键或唯一键的表。 我想更新按日期排序的第n条记录中的某些值。 mysql更新限制没有偏移量(如限制1,2),我该怎么做?
2回复

是否可以选择和更新未知值?

我有下表 桌子 假设 Michele(1) 离开了,我希望她的主管 (2) 接管监督 Michele 所监督的人(Francis, 4) 会回报我 2(Michele) 要更新我只会做
1回复

检查是否更新了多个表

我一直在尝试做与如何知道MySQL表的最后更新时间相同的事情? 但是对于多个表名。 我似乎无法正确解决。 我想检索五个表的update_time,并且我假设我必须做类似的事情 但这似乎不起作用,因为它一直都在取一个名字。 您可以给我任何建议,我将不胜感激。
1回复

在更新之前检查列是否为零

我如何在插入数据库之前先检查该列是否为零 这是我尝试过的方法,但是在更新之后,它仍然使用最后插入的ID插入新行,但是我只希望它在不插入的情况下进行更新
1回复

我怎么知道mysql表是否更新了?

实际上我在本页的另一个问题上使用了以下句子: 但我认为它使用了大量的处理时间,如果更新表时mysql-server会向我发送信号会更容易,所以我可以等到我的程序检测到该信号。 这可能吗? 我在用C编程。 非常感谢你。
1回复

检查是否存在,然后插入更新

我需要检查数据是否存在(如果数据不存在),那么我将能够插入和更新,但是如果数据存在,则消息框将显示该数据已经存在,但是当我尝试添加已存在的相同数据时它仍会添加,并且没有消息框显示它已经存在。 这是我的代码 我的代码可能是什么问题? 提前致谢。
1回复

SQL是否存在更新数量

我要实现的是一种单一形式,其中使用手持式条形码读取器的用户读取条形码,并且每次读取的页面都会发送一个SQL命令来记录扫描的产品数量。 我有一个名为packinglist的数据库和一个名为list的表,该表具有两列条形码和数量。 我在页面上有这个字符串: 第一次读取条形码时,它