2014-01-14 131 views
0

比方說,我有3列討論:更新主鍵值

表:表1 rec_no - >主鍵(整數) 產品 prodlocation

我會盡力做一個創紀錄的轉變

update table1 set rec_no = rec_no - 1 - >工作正常

update table1 set rec_no = rec_no + 1 - >失敗,主鍵衝突

我明白我們不應該操縱數據,如果它是主鍵的一部分。

出於討論的緣故,任何想法爲什麼第二個查詢失敗?如果兩個查詢均失敗,我認爲這是可以接受的

+0

主鍵違規通常意味着您嘗試設置的值已經存在於另一條記錄中。但是,您是否將這兩個查詢連接起來? –

+0

這兩個查詢都是單獨的函數。我一次只運行一個查詢。我的rec_no數據只是0到10之間的數字,無論是+1還是-1,數據仍然存在。 如果兩個查詢均失敗,則會更容易。只有-1獲得成功,這讓我感到困惑。 – user3015739

回答

0

ON UPDATE CASCADE

您需要設置ON UPDATE CASCADE對於那些外鍵:

ALTER TABLE bar 
ADD CONSTRAINT FK_foo_bar 
FOREIGN KEY (fooid) REFERENCES foo(id) 
ON UPDATE CASCADE 

然後你只需更新FKS並參照領域也將被更新,作爲交易的一部分:

UPDATE foo SET id = id + 1000 

請注意,要改變約束,他們需要被刪除。