错误1833(HY000):无法更改列MySQL

Ste*_*lar 2 mysql sql

我试图将自动增量添加到person_id人员表的主键。但是,当我运行命令时,出现以下错误。

错误1833(HY000):无法更改列“ person_id”:用于表“ bank.favorite_food”的外键约束“ fk_fav_food_person_id”

用于以下命令。我正在使用MySQL 5.7.20

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Bil*_*win 7

因为外键必须与它们引用的列的数据类型匹配,所以有意义的是,更改列的数据类型很可能会使引用它的外键不满意。

MySQL似乎对此采取了防范措施,并拒绝尝试修改该列。但是检查您所做的特定修改是否实际上会更改数据类型还不够聪明。它只是拒绝任何试图修改该列的尝试。

您可以通过暂时禁用外键检查来解决此问题。我重新创建了您的表并确认了它:

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
ERROR 1833 (HY000): Cannot change column 'person_id': used in a foreign key constraint 'favorite_food_ibfk_1' of table 'test.favorite_food'

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> set foreign_key_checks=1;
Run Code Online (Sandbox Code Playgroud)

  • 我希望其他通过 O'Reilly 的“学习 SQL”进行研究的人也能找到这个很好的答案。 (3认同)