MySQLでalter tableしてauto_incrementなcolumnをaddしたい
と思ったけどすんなり行かなかったのでメモ。
+-------+--------------+------+-----+ | Field | Type | Null | Key | +-------+--------------+------+-----+ | id | char(32) | NO | PRI | | title | varchar(300) | NO | | +-------+--------------+------+-----+
↑のようなテーブルhogeにauto_encrementなfugaカラムを追加しようとしたが・・・
mysql> alter table hoge add column fuga int NOT NULL AUTO_INCREMENT after id; ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
だめ。マニュアルによると「AUTO_INCREMENT カラムはインデックスされなければいけない」らしい。
http://dev.mysql.com/doc/refman/5.1/ja/alter-table.html
mysql> alter table hoge add column fuga int NOT NULL AUTO_INCREMENT KEY after id; ERROR 1068 (42000): Multiple primary key defined
だめ。それならばと「KEY」って書いたら、主キー追加しようとしてると思われた><
mysql> alter table hoge add column fuga int NOT NULL AUTO_INCREMENT after id, ADD INDEX (fuga);
↑というわけでこれが正解。
ただし、
レプリケーションが利用された時、テーブルに AUTO_INCREMENT カラムを追加してもスレーブとマスターの行は同じ順番にはならないでしょう。
ということらしいのでレプリケーションしてる場合は一工夫いるかも。
※手元の環境で試したら、工夫しなくてもm/sともにちゃんと同じ番号が振られた。