如何从mysql表中删除auto_increment

16

这应该是一个非常简单的问题,但我找不到有效的解决方案。

我将数据从Oracle迁移到MYSQL,在此过程中,所有主键都设置为自动递增。

然而,有很多已知的关系(父PK与子PK相同)。

因此,正确的处理方法是先插入父表,获取result.insertId,然后将相同的值插入子表。我知道我可以在插入命令中忽略自动递增,直接发送ID,但我不想就这样放弃。

由于我读到的解决方案说我需要将列更改为完全相同的规范,但自动递增,因此我运行了以下SQL:


我将数据从Oracle迁移到MYSQL,在此过程中,所有主键都设置为自动递增。然而,有很多已知的关系(父PK与子PK相同)。因此,正确的处理方法是先插入父表,获取result.insertId,然后将相同的值插入子表。我知道我可以在插入命令中忽略自动递增,直接发送ID,但我不想就这样放弃。由于我读到的解决方案说我需要将列更改为完全相同的规范,但自动递增,因此我运行了以下SQL:
alter table added_object modify column id_interaction_object int(11) not null;

..然后我收到以下消息:

ERROR 1833 (HY000):无法更改列'id_interaction_object':在表'metric'中使用了外键约束'FK__METRIC__ADDED_OBJECT'

有什么建议吗?

谢谢


1
将来你会比我更专业,但这个语句应该写成这样:ALTER TABLE added_object MODIFY COLUMN id_interaction_object INT(11) NOT NULL; - GilbertS
1个回答

33

您需要禁用外键检查:

SET FOREIGN_KEY_CHECKS=0;

alter table added_object modify column id_interaction_object int(11) not null;

SET FOREIGN_KEY_CHECKS=1;

谢谢,它起作用了!那么重置将继续使用auto_increment的表的值的最佳方法是什么? - JLCDev
@编码器 你是什么意思?也许是这个:https://dev59.com/Q2ox5IYBdhLWcg3w3YD- - Paul Spiegel
成功了!非常感谢 :) @PaulSpiegel - Divya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接