2015-11-05 59 views
0

另一個表的主鍵我有一個表user_typeuser_type_id是該表的primary key,我有另一個表user_details其中user_type_idforeign key如何更改外鍵的數據類型時,在MySQL

我想更改user_type_id列的數據類型。

+0

使用InnoDB的我猜? –

+0

從什麼類型到什麼類型。我建議您按原樣複製到兩個工作表,以便在安全沙箱中進行播放,以防'alter table'有損。第一遍 – Drew

+0

我想要將varchar轉換爲整數 –

回答

2

您必須執行幾個步驟。

簡而言之:刪除外鍵,將字段user_type_id從varchar修改爲int,重新創建外鍵。

在繼續操作之前進行備份非常重要。如果user_type_id值包含任何其他數字,那麼varchar到int的轉換可能會擾亂一致性。

詳細:

  1. 首先,你需要從user_details刪除外鍵。爲了得到約束名定義外鍵運行:

SHOW CREATE TABLE user_details;

你會看到類似這樣的:

CONSTRAINT 'some_constraint_name' FOREIGN KEY ('user_type_id') REFERENCES 'user_type' ('user_type_id')

運行

ALTER TABLE user_details DROP FOREIGN KEY some_constraint_name; 
  • 現在你可以改變user_type_id從varchar到int兩個user_typeuser_details表:
  • ALTER TABLE user_type CHANGE user_type_id user_type_id INT(length);

    ALTER TABLE user_details CHANGE user_type_id user_type_id INT(length);

    替換length與舊varchar字段長度。

  • 最後重新創建外鍵:
  • ALTER TABLE user_details ADD FOREIGN KEY (user_type_id) REFERENCES user_type(user_type_id);

    +0

    這個看起來不錯,但是'length'並不是做你暗示它在'INT'列上做的事情。這就是「顯示寬度」,這是綠屏終端時代的傳統功能,這是大多數應用程序忽略的提示。整數的大小僅由8,16,24,32和64位值分別由TINYINT | SMALLINT | MEDIUMINT | INT | BIGINT確定。 http://stackoverflow.com/questions/7552223/int11-vs-intanything-else –

    相關問題