如何更改表中主键的列和MySQL中另一个表中的外键?

时间:2016-08-05 09:03:03

标签: mysql sql

我想运行以下sql查询:

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'

1 个答案:

答案 0 :(得分: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 ... DROP FOREIGN KEY   定义和ALTER TABLE ...之后添加FOREIGN KEY。