2012-06-12 38 views
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' 

所以我需要删除外键约束,然后更新我的表,我想,再一次重新 这些制约因素?

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

回答

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 

希望这会有所帮助。

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