MySQLで「ALTER TABLE … DROP INDEX」すると「Error 150」が出る問題
MySQLでリレーションを作りながらインデックスをホイホイと作っていると陥ってしまうエラーを紹介します。 このエラーはテーブルのインデックスを削除したい場合にできなくなるというもの。
例えば、productテーブルの”product_id”インデックスを次のように削除するとします。
ALTER TABLE product DROP INDEX product_id;
すると、次のようなエラーが。
[HY000][1025] Error on rename of './mydb/#sql-7dda_a5' to './mydb/product' (errno: 150)
あるいは次のようなエラーが出る場合があります。
[42000][1091] Can't DROP 'product_id'; check that column/key exists
このエラーの原因はインデックスのつくり方でも、テーブルの構造でもなく、今のテーブルに不適切なリレーションが張られていることが原因です。
ですので、インデックスを設定しているフィールドに関連付けられているリレーションを切ってみましょう。
2012-03-02