我有看(部分)兩個已存在的表大致是這樣的:修改MySQL的主鍵時,外鍵約束上存在
CREATE TABLE parent (
old_pk CHAR(8) NOT NULL PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE child (
parent_key CHAR(8),
FOREIGN KEY (parent_key) REFERENCES parent(old_pk)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
我想id
列添加到parent
一個新的自動遞增的整數並將其用作主鍵代替,同時仍將old_pk
作爲唯一鍵並允許其他表(如child
)在外鍵約束中引用它。不幸的是,簡單地說ALTER TABLE parent DROP PRIMARY KEY
不起作用:
錯誤代碼:1025
上 './data/#sql-4013_70f5e' 到 './data/parent'(錯誤的命名錯誤:150 )
一些使用谷歌搜索建議這是由於從child
現有的外鍵參考。實質上,我需要一種方法告訴MySQL「使用這個其他列作爲主鍵,但不要忘記原始鍵的唯一鍵」。除了從child
中刪除關鍵限制並在之後恢復它們之外,有什麼方法可以實現這一點嗎?
假設我必須改變表格的位置,而不是使用相同的數據創建副本並在以後交換它們。在嘗試更改表格之前,我嘗試過使用SET FOREIGN_KEY_CHECKS = 0
,但似乎沒有幫助。
,這就是爲什麼我不作用戶可見的主鍵(我所有的從代理主鍵用戶不斷變化的需求是一件令人頭痛的事情,但很高興知道您正在使用代理主鍵http://en.wikipedia.org/wiki/Surrogate_key – 2009-08-05 06:43:39