当前位置: 首页 > 知识库问答 >
问题:

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

吕冠宇
2023-03-14

我正在尝试将自动增量添加到人员表的主键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;

共有2个答案

戎劲
2023-03-14

您可以关闭外键检查:

SET FOREIGN_KEY_CHECKS = 0;

/* DO WHAT YOU NEED HERE */

SET FOREIGN_KEY_CHECKS = 1;

有了AUTO_INCREMENT,您可能会遇到问题,为此您可以使用:

错误1062:ALTER TABLE导致auto_increment重新排序,导致键“PRIMARY”的条目“1”重复

通过以下查询获取sql_mode的当前值:

SELECT @@sql_mode;

然后使用以下查询将sql_mode设置为NO_AUTO_VALUE_ON_ZERO:

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

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

汝宏伯
2023-03-14

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

看起来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;
 类似资料:
  • 我创建了一个表格,插入拳头的名字,姓氏和电话,但我有这个错误,不能弄清楚它在哪里 这是我的php代码第一个名为displayPhone的文件。php 第二个文件名为savePhone。php 我的库名'宠物'表名'数据'。该表包含3部分first_name,last_name和电话都是varchar类型

  • 问题内容: 尝试在mysql中创建表时出现错误。 有解决的技巧吗? 错误: 问题答案: 查看有关外键约束的MySQL手册: 如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150。 一些想法: 最好删除表,并使用格式正确的语法对其进行新建

  • 问题内容: 我正在尝试为体育馆管理系统创建数据库,但无法弄清楚为什么会出现此错误。我试图在这里搜索答案,但找不到。 这是父表。 你们能帮我解决这个问题吗?谢谢。 问题答案: 为了将字段定义为,引用的父字段必须在其上定义了索引。 根据有关约束的文档: 参考parent_tbl_name(index_col_name,…) 定义上,和分别。并确保子列定义必须与其父列定义匹配。 更改表定义如下: 更改表

  • 问题内容: 我已经阅读了 Silberschatz的 数据库系统概念 ,第6版。我将在MySQL的OS X上实现第2章所示的大学数据库系统。但是我在创建表时遇到了麻烦。桌子看起来像 __ 创建表将导致以下错误。 在google搜索外键约束之后,我刚刚了解到“外键约束”一词表示来自表中外键列的数据必须存在于表的主键列中。但是我应该在插入数据时遇到此错误。 如果没有,为什么作者让我执行该SQL语句?

  • 关于这个错误,我到处都找过,也看过很多例子,但我还是想不出我的脚本有什么问题。如果这是一个常见的问题,我很抱歉,但到目前为止,搜索它对我没有帮助。剧本如下: 非常感谢你的帮助。