我想通过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'
所以我需要删除外键约束然后根据需要更新我的表并再次重新应用 再次受到这些限制?
在这种情况下,我应该如何更新我的测试表?
答案 0 :(得分: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查询吗?
答案 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
希望这有帮助。