gpt4 book ai didi

MySQL主键重命名

转载 作者:行者123 更新时间:2023-11-29 18:22:06 26 4
gpt4 key购买 nike

我有下表

1. TABLE1 (Primary Key ID)
2. TABLE2 (ID Foreign key reference from TABLE1)
3. TABLE3 (ID Foreign key reference from TABLE1)
4. TABLE4 (ID Foreign key reference from TABLE1)
5. TABLE5 (ID Foreign key reference from TABLE1)

以上5张表数据量巨大。

现在我尝试将 TABLE1 中的 ID 重命名为 OLD_ID

我想通过设置 SET FOREIGN_KEY_CHECKS = 0; 重命名 ID 列但无法重命名并出现以下错误

Error Code: 1846 ALGORITHM=COPY is not supported. Reason: Columns participating in a foreign key are renamed. Try ALGORITHM=INPLACE.

我知道如果我从所有子表中删除外键,那么我们可以轻松重命名。但由于数据量巨大,在子表中删除和添加外键需要花费大量时间。

请建议重命名主键字段的最佳方法是什么?

我正在 MySql 中进行此事件。

最佳答案

实际上它是 MySql 中的一个错误 - https://bugs.mysql.com/bug.php?id=82946

据此 - 当foreign_key_checks=0时,InnoDB允许一个索引所需的索引要删除的外键约束,将表放入不一致并导致表加载时发生外键检查失败。 InnoDB 现在可以防止删除外键所需的索引约束,即使foreign_key_checks = 0。外键约束必须在删除外键索引之前删除。

mysql引用文档中也提到了-https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_foreign_key_checks

所以你必须首先删除外键

解决方案是首先删除外键,然后更改列,最后添加回约束。

ALTER TABLE `TABLE1`
DROP FOREIGN KEY `mytable_oldname_fk`,
CHANGE COLUMN oldname newname INT(11) DEFAULT NULL,
ADD CONSTRAINT `mytable_newname_fk` FOREIGN KEY (`newname`) REFERENCES `anothertable` (`id`)

关于MySQL主键重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46494091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com