我想运行以下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'
答案 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。