【问题标题】:Why does my child table tblOefenen2 didn't get updated after inserting data on cascade update?为什么在级联更新中插入数据后我的子表 tblOefenen2 没有得到更新?
【发布时间】:2020-08-20 07:52:25
【问题描述】:

我有两个名为 tblOefenen(带有主键)和 tblOefenen2(带有外键)的表。我很早就放弃了外键,因为我想将“更新级联”添加到外键中。

那么做了什么: 1.我去掉了tbloefenen2的约束(外键)。 2.我已将新的外键添加到列 ID,我的主键也在列 ID 上以及表 tbloefenen 中:

begin tran
alter table tbloefenen2
ADD constraint pkoefenen2 FOREIGN KEY (ID)
references tbloefenen (ID)
on UPDATE cascade
rollback tran
  1. 我已在 tbloefenen(主键表)中插入了一些数据: 开始翻译
    UPDATE tblOefenen
    set naam = 'anouk'
    where naam = 'Svenn'

    select *
    from tblOefenen

    rollback tran
  1. 在我插入上面的数据后,只有父(主键)表得到更新。tbloefenen2(带有外键)保持不变(我希望在插入父主键表后自动更新)

有人可以帮帮我吗?

【问题讨论】:

  • 外键是ID,而不是naam
  • 只有更改ID才会得到级联。

标签: mysql sql tsql


【解决方案1】:

ON UPDATE CASCADE 仅在您更新外键中的列时适用,而不适用于表中的其他列。所以如果你这样做了

UPDATE tblOefenen
SET ID = 10
WHERE ID = 20;

SELECT * 
FROM tblOefenen2;

然后你会看到ID = 10变成了ID = 20

【讨论】:

  • 啊好吧!谢谢。但是当我将数据插入父表时,是否有其他方法可以将我的数据自动插入到外键表中?否则我的数据将不完整。
  • 您没有插入任何内容,您只是在更新现有行。您可以使用触发器插入到子表中。
  • 对不起,是的,我的意思是插入。我已经建立了一个触发器,但我也在猜测这是唯一的方法。这让事情变得清晰。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多