MySQL的删除外键报错Error on rename of '

外键删除报错几种情况解决,我用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
————————————————
版权声明:本文为CSDN博主「凤影」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/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;
————————————————
版权声明:本文为CSDN博主「动静如水」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/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;
————————————————
版权声明:本文为CSDN博主「levy_cui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/levy_cui/article/details/51143078

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值