MySQL主键重命名

MySQL主键重命名,mysql,Mysql,我有以下几张桌子 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个表都有大量的数据

我有以下几张桌子

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\u ID

我想通过设置
SET FOREIGN\u KEY\u CHECKS=0来重命名ID列
但无法重命名和获取以下错误

错误代码:1846算法=不支持复制。原因:栏目 参与外键将被重命名。尝试算法=就地

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

请建议重命名主键字段的最佳方法


我在MySql中做这个活动

实际上这是MySql中的一个bug-

根据这一点-如果外键检查=0,InnoDB允许 要删除的外键约束,将表放入 不一致,导致在表加载时进行外键检查 失败。InnoDB现在可以防止删除外键所需的索引 约束,即使使用外键检查=0。外键约束 必须在删除外键索引之前删除

mysql参考文件中也提到-

所以你必须先放下外键

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

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中的一个bug-

根据这一点-如果外键检查=0,InnoDB允许 要删除的外键约束,将表放入 不一致,导致在表加载时进行外键检查 失败。InnoDB现在可以防止删除外键所需的索引 约束,即使使用外键检查=0。外键约束 必须在删除外键索引之前删除

mysql参考文件中也提到-

所以你必须先放下外键

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

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`)

您知道外键约束的名称吗?知道。我知道约束名称您知道外键约束的名称吗?知道。我知道这个名字