我想删除我的表中的外键,但是遇到了以下错误消息
mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>
我想删除我的表中的外键,但是遇到了以下错误消息
mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>
这里Chris White描述的解决方案对我有效。
根本问题是MySQL创建了索引和外键。必须删除两者(首先删除外键,与Chris所说的相反)。
show create table table_name;
SHOW CREATE TABLE `table_name`:
| table_name | CREATE TABLE `table_name` (
`id` int(20) unsigned NOT NULL auto_increment,
`key_column` smallint(5) unsigned default '1',
KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name
CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name
`second_table` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
删除外键约束:
ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
删除该键
ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
那对我来说就足够了。
看起来是MySQL错误消息中的一个bug。(http://bugs.mysql.com/bug.php?id=10333)
使用SHOW CREATE TABLE table_name
命令查看外键的实际名称。似乎mysql查询浏览器在生成查询时出现了外键名称拼写错误的问题。
mysql> ALTER TABLE mytable DROP PRIMARY KEY;
ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150).
mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);
以下是一些有用的链接。
链接 2 [请查找发布者为Alex Blume于2008年11月7日下午5:09和Hector Delgadillo于2011年1月21日上午4:57的内容]
你应该像Fahim Parkar建议的那样尝试使用外键名称,但实际上这并不总是有效。
在我的情况下,我使用了
FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)
添加外键的代码。
这段代码存在问题,它不是有效的,应该会抛出某种语法错误,但它仍然添加了一个随机命名的外键。
当我用正确的语法添加外键时:
CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)
以下代码已正确删除它:
ALTER TABLE `table1` DROP FOREIGN KEY `fk`
如果您尝试删除一个具有无效名称的外键,也可能会发生此类错误。查看表属性非常重要。
SHOW CREATE TABLE `table1`
如果您遇到此类错误,请检查外键名称。
DROP FOREIGN KEY
时,我也遇到了这个错误 - 改为使用DROP KEY
解决了我的问题。 - StampyCode