错误1833(hy000):无法更改mysql列

nwlls2ji  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(829)

我正在尝试将自动增量添加到主键 person_id 一个人的table。但是,当我运行命令时,我得到以下错误。
错误1833(hy000):无法更改列“person\u id”:用于表“bank.favorite\u food”的外键约束“fk\u fav\u food\u person\u id”
我使用的是mysql 5.7.20

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;

wlsrxk51

wlsrxk511#

因为外键必须与它们引用的列的数据类型匹配,所以更改列的数据类型可能会打乱引用它的外键是有意义的。
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;
3pmvbmvn

3pmvbmvn2#

您可以关闭外键检查:

SET FOREIGN_KEY_CHECKS = 0;

/* DO WHAT YOU NEED HERE */

SET FOREIGN_KEY_CHECKS = 1;

使用自动增量,您可能会遇到问题,为此,您可以使用:
错误1062:alter table导致自动增量重新排序,导致键“primary”的条目“1”重复
通过此查询获取sql\ U模式的当前值:

SELECT @@sql_mode;

然后使用下面的查询将sql\模式设置为no\ auto\ value\ on\ u zero:

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

确保在应用更改之前进行备份。

相关问题