另一個表的主鍵我有一個表user_type
和user_type_id
是該表的primary key
,我有另一個表user_details
其中user_type_id
爲foreign key
。如何更改外鍵的數據類型時,在MySQL
我想更改user_type_id
列的數據類型。
另一個表的主鍵我有一個表user_type
和user_type_id
是該表的primary key
,我有另一個表user_details
其中user_type_id
爲foreign key
。如何更改外鍵的數據類型時,在MySQL
我想更改user_type_id
列的數據類型。
您必須執行幾個步驟。
簡而言之:刪除外鍵,將字段user_type_id從varchar修改爲int,重新創建外鍵。
在繼續操作之前進行備份非常重要。如果user_type_id
值包含任何其他數字,那麼varchar到int的轉換可能會擾亂一致性。
詳細:
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_type
和user_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);
這個看起來不錯,但是'length'並不是做你暗示它在'INT'列上做的事情。這就是「顯示寬度」,這是綠屏終端時代的傳統功能,這是大多數應用程序忽略的提示。整數的大小僅由8,16,24,32和64位值分別由TINYINT | SMALLINT | MEDIUMINT | INT | BIGINT確定。 http://stackoverflow.com/questions/7552223/int11-vs-intanything-else –
使用InnoDB的我猜? –
從什麼類型到什麼類型。我建議您按原樣複製到兩個工作表,以便在安全沙箱中進行播放,以防'alter table'有損。第一遍 – Drew
我想要將varchar轉換爲整數 –