尝试删除列会产生错误1025(HY000):重命名...时出错(errno:150)。

38

我正在尝试运行一个alter table命令来删除一列:

ERROR 1025 (HY000): Error on rename of .... (errno: 150).  

如果我理解正确,这是一个外键问题,但我不知道如何修复它。有没有人能够友好地告诉我如何让它正常工作。

用于创建表的代码:

CREATE TABLE categories(
cid INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
assets_id INT NOT NULL,
cat_name VARCHAR(30) NOT NULL,
INDEX(assets_id),
FOREIGN KEY (assets_id) REFERENCES asset(aid) ON UPDATE CASCADE

)
ENGINE=INNODB DEFAULT CHARSET=utf8;

修改命令:

ALTER TABLE categories DROP COLUMN assets_id;

表格“categories”完全为空。因此,没有信息可以触发级联限制。

我该如何删除“assets_id”列?

2个回答

69

使用SHOW CREATE TABLE categories来显示约束的名称。

很可能是categories_ibfk_1

使用该名称先删除外键,然后再删除列:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

3
@Henkka:不用客气。请将答案标记为已接受(并对您提出的其他问题也这样做),这将鼓励更多人帮助您。 - Quassnoi
@Henkka:每个答案左边都有一个剩余投票数下面的复选框。点击它,使其变为绿色。 - Quassnoi

0
对我来说,问题是另一个:
该网站(意外地)对所有人都是可访问的。因此,更新脚本被启动了多次。这导致竞争条件,从而引发了像这样的错误。
-> 确保该网站只被访问一次,直到每个脚本都完成!

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