2016-08-05 100 views
0

我想运行下面的SQL查询:如何改变表中的主键和MySQL中另一个表中的外键?

ALTER TABLE USER MODIFY USER_ID int UNSIGNED NOT NULL AUTO_INCREMENT 

USER_ID是另一个表的外键。改变这一栏的最好方法是什么?

这是错误,我得到:

Error Code: 1833. Cannot change column 'USER_ID': used in a foreign key constraint 'order_detail_ibfk_1' of table 'test.order_detail' 
+0

外键和引用列的数据类型应该相同。 尝试首先更改参考列的数据类型。 – Priyanshu

回答

1

这必须是multistep

ALTER TABLE other_table DROP FOREIGN KEY fk_name 
ALTER TABLE other_table MODIFY USER_ID int UNSIGNED NOT NULL 
ALTER TABLE USER MODIFY USER_ID int UNSIGNED NOT NULL AUTO_INCREMENT 
ALTER TABLE other_table ADD FOREIGN KEY ... 

在MySQL 5.7中,服务器禁止改变到 有潜力外键列导致参照完整性的丧失。它也 禁止更改可能不安全的此类列的数据类型。例如,允许将VARCHAR(20)更改为VARCHAR(30),但将 更改为VARCHAR(1024)不是因为这会改变存储各个值所需的长度字节数 。解决办法是在更改列 定义和ALTER TABLE ... ADD FOREIGN KEY之后,使用ALTER TABLE ... DROP FOREIGN KEY之后,使用ALTER TABLE ... DROP FOREIGN KEY 。

+0

你能在这里请这个新问题吗? http://stackoverflow.com/questions/38785899/column-is-there-but-when-i-try-to-delete-it-says-no-column-in-mysql –

+0

刚才回答了它 – e4c5

+0

你也是这样设法改变这个领域? – e4c5

相关问题