我试图将自动增量添加到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)
因为外键必须与它们引用的列的数据类型匹配,所以有意义的是,更改列的数据类型很可能会使引用它的外键不满意。
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)