2010-12-17 369 views
1

我有表。它有5列,其中3列是主鍵組合。在oracle中更新主鍵

表(可樂,COLB,COLC,冷,油菜)

我想更新其是在主鍵組列中的一個。怎麼做?

它給出主鍵約束錯誤。

+3

你爲什麼要更新主鍵?它應該是不可變的。 – davek 2010-12-17 10:18:35

+0

有需要。請幫助 – 2010-12-17 10:19:39

+2

您希望您的參考數據保持不變或修改? – 2010-12-17 10:30:56

回答

2

您應該禁用您的修改,重新啓用鏈接到您的主鍵的約束。 (唯一的,非空,等...)

看看這個website

2

如果你真的需要在這三根柱子保持唯一性,然後定義一個唯一約束的三列組成的當前的PK,然後定義一個新的代理主鍵列。

+1

爲什麼?主鍵只是候選鍵。您使用哪個唯一性約束來強制執行密鑰並沒有什麼不同。至於添加替代品,這一切取決於你將如何使用它。爲了它而添加替代品沒有意義。穩定性(不是「不變性」)是任何關鍵的有用屬性,但它不是絕對的要求。即使代理鍵有時需要更新。 – sqlvogel 2010-12-17 10:58:53

+4

如果您不得不爲特殊情況(例如數據遷移)以外的任何事情更新主鍵,那麼我會建議設計出現問題:http://stackoverflow.com/questions/2499246/how-更新主鍵/ 2499507#2499507 – davek 2010-12-17 11:03:06

+1

我不同意。你可能想要做這件事有很好的理由。但無論如何,你建議的解決方案並沒有實際的區別。更新由PRIMARY KEY約束強制執行的約束與更新由UNIQUE密鑰約束執行的密鑰完全相同。如果你真的打算說*外鍵*,那麼我認爲你可以明確表示 - 可能沒有任何外鍵引用複合鍵,即使有,那麼是否需要更新取決於需求。所以我認爲你的答案根本沒有幫助。 – sqlvogel 2010-12-17 11:35:22