外键删除报错几种情况解决,我用3解决了
1
曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方。
例子如下:
mysql> ALTER TABLE ruler.test2child DROP FOREIGN KEY test;
ERROR 1025 : Error on rename of ‘./ruler/test2child’ to ‘./ruler/#sql2-298-8f’ (errno:
152)
这里并不是不能删除外键,而是使用了错误的外键名称,但是MySQL报的错实在离谱。
正确的错误信息要如下查询才能知道:
mysql> show innodb status;
------------------------LATEST FOREIGN KEY ERROR
------------------------071222 20:48:26 Error in dropping of a foreign key constraint of table
“ruler”.“test2child”,
in SQL command
ALTER TABLE ruler.test2child DROP FOREIGN KEY test
Cannot find a constraint with the given id “test”.
另外外键的其他操作也有类似情况:
测试数据库版本为:
5.2.0-falcon-alpha-community-nt
————————————————
版权声明:本文为优快云博主「凤影」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/fenixshadow/article/details/1958876
2
1.在命令行中输入:
show create table _testinfo;
1
2.找到
KEY FKt0o9prc1ecby7acjdbyrru9hv
(detailid
)
1
或者
CONSTRAINT FKt0o9prc1ecby7acjdbyrru9hv
FOREIGN KEY (detailid
) REFERENCES _detail
(id
)
1
3.然后输入:
alter table _testinfo drop foreign key FKt0o9prc1ecby7acjdbyrru9hv;
————————————————
版权声明:本文为优快云博主「动静如水」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/maotai_2010/article/details/52185822
我的注释:外键约束名constraint _________ foreign key
3
我曾经也遇到过类似的问题,这是因为MySQL的特殊特性:
1.MYSQL在建外键后,会自动建一个同名的索引
2.而删除外键的时候,这个同名索引如果没被删,则MYSQL认为外键
所以你删除了外键,再查询,因为有同名索引在,因此还能看到,
如果再执行一次删除同名索引的存在,再查询外键,就看不到外键了
查看索引:show index from practable;
删除外键的索引:alter table practable drop index prac(索引名);
删除外键:alter table practable drop prac(外键名);
4
Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。
解决方法:
在Mysql中取消外键约束:
SET FOREIGN_KEY_CHECKS=0;
然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入,
然后再设置外键约束:
SET FOREIGN_KEY_CHECKS=1;
————————————————
版权声明:本文为优快云博主「levy_cui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/levy_cui/article/details/51143078