mysql - 错误 1833 (HY000) : Cannot change column MySQL

标签 mysql sql

我正在尝试将自动递增添加到 person 表的主键 person_id 中。但是,当我运行命令时,出现以下错误。

ERROR 1833 (HY000): Cannot change column 'person_id': used in a foreign key constraint 'fk_fav_food_person_id' of table 'bank.favorite_food'

对于以下命令。我使用的是 MySQL 5.7.20

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;

enter image description here

最佳答案

因为外键必须匹配它们引用的列的数据类型,所以更改列的数据类型很可能会扰乱引用它的外键是有道理的。

看来 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;

关于mysql - 错误 1833 (HY000) : Cannot change column MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140154/

相关文章:

java - 将值插入到引用另一个表的外键的 MySQL 表中

PHP mysqli_fetch_array 缺少一些字段

android - 获取范围之间的随机数,不重复

mysql - 没有 join 语句的双重选择的 sql

java - 条件左外连接 SQL 查询到 JPQL

php - 如何获得Laravel中所有型号的列表?

sql - 使用连接限制结果而不计算连接结果?

PHP错误未定义索引

sql - PostgreSQL - 以动态方式聚合具有相似值 (+/- 1) 的行

sql - 在列的子集上选择不同的和分组依据