繁体   English   中英

使用主键更新表,该表在许多子表中用作外键

[英]update table with primary key , which is used as foreign key in many child tables

我想通过Java更新表(使用mysql)。

I have a Test table with structure

id(pk)  name address

还有另一张桌子

Practice with following structure

    p_id  id(fk)   branch

现在我想更新测试表,但是根据外键约束,我将得到

“无法删除或更新父行:外键约束失败

”,因为它也在子表中使用。因此,如果我想更新它,如何仍然可以更新我的测试表?

我正在尝试这种方式。

UPDATE Test SET  Test.id=1,NAME='XYZ'

因此,我是否需要删除外键约束,然后根据需要更新表并再次重新应用这些约束?

在这种情况下应如何更新我的测试表?

我认为您正在尝试做的是:

UPDATE Test SET NAME='XYZ' WHERE id = 1

如果您执行了UPDATE Test SET id=1, Name = 'XYZ' ,则您将尝试将每个测试记录设置为id=1Name = 'XYZ'

该查询无疑会失败,因为您不能有多个id=1行。

如果您有一个id=3的测试记录,并且有一个引用该测试记录的练习记录,并且您的SQL命令现在尝试将所有的id更改为1,则将发生外键约束失败。

因此,外键约束失败。

您确定您具有正确的SQL查询吗?

从您的语句,UPDATE Test SET Test.id=1,NAME='XYZ' ,我基本上了解到的是,您正在尝试同时更新主键以及数据。

如果您要执行上述操作,建议您执行以下操作。

ALGO:

步骤1:使用新的PK添加新记录
步骤2:用新的PK更新孩子
步骤3:删除旧记录。

    insert into test(id,name,address) values(5,'name','address');
          --where 5 is your new PK.

    --Updating the child table
    update practice set p_id=5 where p_id=1 
          --where 1 is your old id in Test.

    --delete the record
    delete from test where id=1 

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM