gpt4 book ai didi

mysql - 删除 MySQL 外键失败导致表丢失

转载 作者:行者123 更新时间:2023-11-30 01:27:08 38 4
gpt4 key购买 nike

我有一个像这样的表:

CREATE TABLE `Words` (
`wordId` int(11) NOT NULL AUTO_INCREMENT,
... snip! ...
`PartOfSpeechpartOfSpeechId` int(11) DEFAULT NULL,
PRIMARY KEY (`wordId`) USING BTREE,
KEY `fk_Words_PartOfSpeech` (`PartOfSpeechpartOfSpeechId`),
CONSTRAINT `fk_Words_PartOfSpeech` FOREIGN KEY (`PartOfSpeechpartOfSpeechId`) REFERENCES `PartOfSpeech` (`partOfSpeechId`) ON DELETE SET NULL ON UPDATE NO ACTION,
) ENGINE=InnoDB AUTO_INCREMENT=7306 DEFAULT CHARSET=utf8

我需要将 PartOfSpeechpartOfSpeechId 列转换为枚举值(即将其保留为 INT 列,但完全删除它引用的表)。

由于 Words 上的 FK,尝试删除 PartOfSpeech 表会失败。为了解决这个问题,我运行了 ALTER TABLE Words DROP FOREIGN KEY fk_Words_PartOfSpeech ,使用 FK 的名称而不是到处注明的列。我仍然收到错误:

ERROR 1025 (HY000): Error on rename of './lexercise/#sql-1a5_263' to './lexercise/Words' (errno: 150)

在寻找表词时,它已经消失了。走了。不知道去哪里。据推测,MySQL 的内部更改表代码正在创建临时表,但无法将其返回到正确的名称/位置。

这是怎么回事?删除外键怎么可能丢失整个表?我的背景是 Postgres,不知道如何最好地调试它。

最佳答案

好的,对于任何在某个时候发现同样问题的人来说,我认为发生的情况如下:

表上有另一个外键(上面未显示),它引用了在尝试删除上面的 FK 之前已重命名的表。我认为 that FK 的存在是导致我的 ALTER TABLE 调用出现错误的原因。

MySQL 基本上在 ALTER TABLE 调用期间重建表模式 - 它不会进行增量更改。因此,如果表架构存在其他问题,请确保识别它们并修复它们(如果您随机丢失表)。

哦,MySQL 真的应该更好地处理这个问题。天啊。

关于mysql - 删除 MySQL 外键失败导致表丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867444/

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