mysql 修改索引时,外键约束造成的奇怪问题


事情是这样的,在Windows的mysql5.5 ,我想修改一个表的索引,于是执行

ALTER TABLE practice_log DROP INDEX ix_practice_log_userid;
ALTER TABLE practice_log ADD INDEX ix_practice_log_userid(userid,practicetime);

但是报错:unable drop index 。。。:  needed in a foreign key constraint

于是,强行把外键约束检查关闭:

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE practice_log DROP INDEX ix_practice_log_userid;
ALTER TABLE practice_log ADD INDEX ix_practice_log_userid(userid,practicetime)
SET FOREIGN_KEY_CHECKS=1;

索引修改成功。

但是,问题来了。。。。。

重启数据库后,表 practice_log 不见了!
删除表practice_log,报错:表不存在;
建表,报错:表已存在!

这应该是mysql的bug。

解决办法:不要用SET FOREIGN_KEY_CHECKS=0;老老实实得删掉外键约束吧,再修改索引,搞定。

另外,约束影响性能,尽量不要用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值