0

我想通过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'

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

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

4

2 回答 2

3

我认为你想要做的是:

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

如果这样做UPDATE Test SET id=1, Name = 'XYZ',您将尝试将每条测试记录设置为id=1, 和Name = 'XYZ'

查询无疑会失败,因为您不能有超过一行id=1.

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

因此,外键约束失败。

你确定你有正确的 SQL 查询吗?

于 2012-06-12T05:10:12.633 回答
1

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

如果您想做上述操作,我建议您执行以下操作。

算法:

第 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 

希望这可以帮助。

于 2012-06-12T07:17:16.270 回答