2014-04-01 48 views
0

我有一個表中的字符串主鍵,我想修改它爲int自動增量, 問題是這個主鍵也是在另一個表中的外鍵並連接到它的主鍵,並且它們都是另一個表中的外鍵。有誰知道正確的方式和順序來執行此修改,因爲外鍵在自動遞增主鍵時檢索正確的值?謝謝你的時間。sql修改主鍵這是在其他表中的一個fk

+0

您需要通過多個步驟來完成此操作,並且如果FK約束條件由RDBMS執行,那麼這很重要。一般來說,您需要添加臨時列並在刪除/重命名列以使其保持正確之前播放一些shell遊戲。如果你顯示了一個特定的模式,你可能會得到一個非常特定的序列。 –

回答

0

此問題的答案取決於您的數據庫引擎。

如果您使用的是oracle,您希望修改您的約束爲「延遲」 - 這會使事務內的更改違反約束,這將在提交時進行驗證(它不會允許提交FK沒有PK,但它可以讓你有一個交易,你可以更新兩個,沒有任何問題)。

某些數據庫具有「on update cascade」約束條件,允許將PK上的更新級聯到FK。

相關問題