MySQL の create index で Duplicate key name する条件

いつも、Railsのmigrationにまかせっきりの create index 構文で生成される index名 が重複エラーする条件ってなんだろう・・・ということで調べてみました。

テスト環境

MySQL 4.1.22

前提条件

hoges と fugas というテーブルがあり、それぞれ、idとnameというカラムを持っている。

テスト

hogesのnameカラムにindexを張ります。index_name は hoge_index です。

mysql> create index hoge_index ON hoges(name);
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

当然成功です。次に、もう一度、同じコマンドを実行します。

mysql> create index hoge_index ON hoges(name);
ERROR 1061 (42000): Duplicate key name 'hoge_index'

Duplicate key name です。同じテーブルで同じ名前のindex_name は使えません。
次に、fugasのnameカラムにindexを張ります。index_name は hoge_index です。

mysql> create index hoge_index ON fugas(name);
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

indexを張ることが出来ました。同じindex_nameでもテーブルが違えば大丈夫なのですね。
一応、もう一度同じコマンドを打ちます。

mysql> create index hoge_index ON fugas(name);
ERROR 1061 (42000): Duplicate key name 'hoge_index'

もちろん。Duplicate key name です。