2011-06-09 52 views
0

我想知道是否有一種「簡單」的方式來更改自動增量列的36個字符的UUID主鍵。問題是這個表是由至少另外25個表(大約50列)引用的更改引用表上的主鍵

我使用InnoDB和外鍵約束。

+2

我喜歡的事實是不容易改變這一點,因爲它作爲一個警告,說明爲什麼這些決定不應該掉以輕心。 – 2011-06-09 03:41:38

回答

2

這似乎並不太難:

  1. 確保所有的外鍵約束被定義爲ON UPDATE CASCADE(所以當你更新密鑰值,孩子們的FKS也更新)
  2. 更新內容一個整數(但仍文本,當然)值
  3. ALTER TABLE my_table my_id_column INT AUTO_INCREMENT

你如何從密鑰選擇了新的整數值是由你。也許,只是用這個簡單的查詢,以它們編號從1中指定的順序:

set @i:=0; 
update my_table set 
my_id_column = (@i := @i + 1) 
order by some_ordering_column; 

僅供參考,我只測試了所有的代碼在這裏和它的作品。

+0

通過'ALTER TABLE'將一個'AUTO_INCREMENT'添加到MySQL表的能力是最近增加的(v5.5 +)IIRC – 2011-06-09 04:10:45

+0

非常感謝波希米亞人,我想創建一個額外的列來填充所有ID與數字,然後更改主鍵,但我認爲你的解決方案更好,謝謝。 – PachinSV 2011-06-09 04:41:54

+0

直到我刪除了外鍵約束,它才工作。你確定你使用InnoDB的FK約束嗎? – PachinSV 2011-06-09 04:53:37