我想放弃我的表的外键,但一直到这个错误信息无法删除外键
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>
为避免在尝试删除外键时发生此错误,请使用约束名称而不是外键的列名。
当我试图
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);
一些链接,这将帮助你。
link 2 [查找发布者亚历克斯·布鲁姆在2008年11月7日下午5时09 &发布海克特德尔加迪略于2011年1月21日上午4时57分]
为了避免收到此错误,而试图删除外键,使用约束名而不是外键的列名
它看起来像是MySQL错误消息传递中的一个错误。 (http://bugs.mysql.com/bug.php?id=10333)
使用SHOW CREATE TABLE table_name
看到实际名称外键的。它看起来像是在用外键名称的错误拼写生成查询时,可能是mysql查询浏览器问题。
它可以帮助我知道我的约束被创建为INDEX,而不是FOREIGN KEY。然后我使用了“DROP INDEX”条款。谢谢。 –
解决方案描述here by Chris White为我工作。
根本问题是MySQL创建一个索引和一个外键。两者都必须删除(外键首先与克里斯说的相反)。
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`;
这为我做。
您应该尝试使用Fahim Parkar建议的外键名称。事实上,这也不总是工作。
在我来说,我使用的
FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)
代码通过创建添加FK。
该代码的问题是它无效,应该抛出一些类型的语法错误,但它仍然添加了一个具有随机名称的外键。
当我添加了FK用正确的语法:
CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)
下面的代码把它丢正确:
ALTER TABLE `table1` DROP FOREIGN KEY `fk`
所以这种错误可以如果您尝试去除外来太发生键名称无效。查看表格属性很重要
SHOW CREATE TABLE `table1`
并检查外键名称,如果您遇到此类错误。
这可能会帮助您了解 http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad
@Imdad这个链接描述了另一个错误 - (errno:150) – Devart
试试这个。创建新表(没有外键约束)。将数据复制到新表(使用语法INSERT INTO new_table SELECT * FROM old_table)删除旧表 – Imdad