另一个表的主键我有一个表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转换为整数 –