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

时间:2012-06-12 04:52:01

标签: java mysql

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

I have a Test table with structure

id(pk)  name address

还有另一张表

Practice with following structure

    p_id  id(fk)   branch

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

  

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

“因为它也在子表中使用。 那么如果我想更新它,怎么还能更新我的Test表呢?

我正在尝试这种方式。

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

所以我需要删除外键约束然后根据需要更新我的表并再次重新应用 再次受到这些限制?

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

2 个答案:

答案 0 :(得分:3)

我认为你要做的是:

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查询吗?

答案 1 :(得分:1)

基本上我从您的陈述,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 

希望这有帮助。