2012-06-12 35 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查詢嗎?