【问题标题】:MySQL alter table generating "error on rename"MySQL 更改表生成“重命名错误”
【发布时间】:2012-02-12 22:04:33
【问题描述】:

这是我的错误的打印:

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)

我读过this page ,这表明问题可能是由于早期的一些更改表错误导致的剩余表,并建议您在数据目录中窥探并删除任何名称如“ B-xxx.frm'。

我的错误与此类似,但我的数据目录中没有“#sql2-bcc-16”。无论如何,不​​会有任何先前失败的更改表的工件,因为这只是一个小型测试数据库,我之前实际上没有更改任何表。

编辑:下面有更多信息。

我真正想做的是将另一个表中的 Id(主键)更改为 SMALLINT(而不是 TINYINT)。但是,这个电话表的 Id 是一个外键,引用另一个表中的 Id。所以,我相信我需要先删除该表的外键,然后再对主表进行类型更改。我希望这很清楚。

编辑 2:表格。

Sale - 有 Id TINYINT NOT NULL, PRIMARY KEY (Id)

电话 - 有 Id TINYINT NOT NULL,外键 (Id) REFERENCES Sale (Id)

我希望我的数据库中的所有 ID 都是 SMALLINT 而不是 TINYINT。这就是我现在的情况。

【问题讨论】:

  • 我帖子的顶部一直消失。上面写着“大家好,......” 一个名叫“thinksteep”的人一直在编辑我的帖子。
  • 我相信 Id 是另一个表中的主键...对吗?
  • 法希姆 - 正确!我会用更多相关信息更新 OP。
  • 现在更清楚了.. 感谢您的编辑...

标签: mysql key alter


【解决方案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 是外键的事实。如果我删除整个列,那么在更改主表后将无法“重新附加”ID,对吗?
  • 是的...我的下一个问题:那你为什么要暂时放弃??你到底想做什么?请编辑您的问题
  • 上面的查询也会从 Price 表中删除 Id 列...我相信 Phone 是另一个表,其中 Id 是主键...你能提供两个表的结构吗?
  • 我确实编辑了我的问题,但我会在这里再次解释。我有另一个表“Sale”,带有“Id TINYINT NOT NULL”(并且 Id 是主键)。我只是想让 Id 成为 SMALLINT 而不是 TINYINT,但我的互联网研究让我相信,如果有任何外键指向这个 Id,这是不可能的。所以,我必须先放下那些钥匙。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2010-12-04
  • 2019-08-02
  • 2013-11-09
  • 2018-09-21
  • 2013-09-30
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多