mysql修改索引時,外鍵約束造成的奇怪問題
事情是這樣的,在Windows的mysql5.5 ,我想修改一個表的索引,於是執行
www.2cto.com
[sql]
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
於是,強行把外鍵約束檢查關閉:
[sql]
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;
索引修改成功。
www.2cto.com
但是,問題來了。。。。。
重啟數據庫後,表 practice_log 不見了!
刪除表practice_log,報錯:表不存在;
建表,報錯:表已存在!
這應該是mysql的bug。
解決辦法:不要用SET FOREIGN_KEY_CHECKS=0;老老實實得刪掉外鍵約束吧,再修改索引,搞定。
另外,約束影響性能,盡量不要用。