MySQL修改表时出现“重命名错误”

3

以下是我错误的打印信息:

mysql> ALTER TABLE Price DROP FOREIGN KEY Id
ERROR 1025 (HY000): Error on rename of '.\testdb\Price' to '.\t
estdb\#sql2-bcc-16' (errno: 152)

我已经阅读了这个页面,它建议问题可能是由于以前的alter table错误留下的残留表所致,并建议您在数据目录中搜索并删除任何名称为“B-xxx.frm”的表。

我的错误类似于此,但在我的数据目录中没有“#sql2-bcc-16”。而且无论如何也不会有以前失败的alter table的任何剩余物,因为这只是一个小测试数据库,我以前没有实际更改过任何表。
编辑:以下是更多信息。
我真正想做的是将另一张表中的Id(主键)更改为SMALLINT(而不是TINYINT)。但是,此Phone表的Id是一个外键,引用其他表中的Id。因此,我相信我需要在继续处理主表中的类型更改之前删除此表的外键。我希望这很清楚。
编辑2:桌子。
Sale-具有Id TINYINT NOT NULL,PRIMARY KEY(Id)
Phone-具有Id TINYINT NOT NULL,FOREIGN KEY(Id)REFERENCES Sale(Id)
我希望我的数据库中所有Id都是SMALLINT而不是TINYINT。那是我当前的情况。

我的帖子顶部一直在消失。它说“大家好,...”有人叫做'thinksteep'一直在编辑我的帖子。 - MitchellSalad
我相信Id是另一张表的主键...对吗? - Fahim Parkar
Fahim - 没错!我会更新原帖,提供更多相关信息。 - MitchellSalad
现在更清楚了,谢谢修改。 - Fahim Parkar
1个回答

1

尝试使用 mysql> ALTER TABLE Price DROP Id

希望它能够起作用...祝你好运

我尝试了你的查询 mysql> ALTER TABLE Price DROP FOREIGN KEY Id

它执行了,但是没有起作用!!!

更新:

请使用以下查询...

mysql> ALTER TABLE Price MODIFY Id SMALLINT

mysql> ALTER TABLE Sale MODIFY Id SMALLINT

mysql> ALTER TABLE Phone MODIFY Id SMALLINT


我仍然希望Phone有一个Id字段,我只需要暂时放弃Id是外键的事实。如果我删除整个列,修改主表后就没有办法“重新连接”这些Ids了,对吗? - MitchellSalad
我的下一个问题是:为什么你想暂时删除它?你到底想做什么?请编辑你的问题。 - Fahim Parkar
上述查询还将从Price表中删除ID列... 我相信Phone是另一张表,其中ID是主键...您能提供两个表的结构吗? - Fahim Parkar
我编辑了我的问题,但我会在这里再解释一遍。我有另一个名为“Sale”的表,其中包含一个“Id TINYINT NOT NULL”(而且Id是主键)。我只想将Id变成SMALLINT而不是TINYINT,但我的互联网研究表明,如果有任何指向此Id的外键,则不可能实现这一点。因此,我必须首先删除那些键。 - MitchellSalad

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