MySQLでALTER TABLE ADD PRIMARY KEYを行った際の謎仕様
自前で使いやすいようにSQLの実行をPHP側にフレームワーク化したく、不定期にコードを書き続けているのだが、サイト制作関係の仕事で期間が空いてしまったためだいぶ頭が呆けていた。
今回はMySQLでのALTER TABLE ADD PRIMARY KEYを行った際のMySQLのよくわからない謎仕様に対するぼやき。
久しぶりの更新だというのにほとんどメモの文面になってしまうことはご容赦。
普通にユニークインデックスを付けるときとか、Oracleのときみたいに以下のSQLをMySQL環境下で実行してみた。
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY pk_name (id, col, ....);
普通ならこれでpk_nameがプライマリキーの名前としてテーブル構造に登録されるはずなのだが・・・。
テーブル構造の情報を確認したところ何故か登録されていない。
いや、普通にプライマリキーの情報はきちんと登録されてるんだけど、登録された名称は「PRIMARY」。
いやいや何を冗談を・・・と、これで一度プライマリキーを全削除して再度、ADDを実行してみた。
ALTER TABLE table_name DROP PRIMARY KEY;
結果、変化なし。
普通にコード側、phpMyAdmin、果てはコマンドラインで全部実行してみたが、相も変わらず。
え、ちょっと待って・・・。
ひょっとして、MySQLてプライマリキーの名称つけられへんの???
じゃあ、こんなSQLで、
ALTER TABLE table_name DROP CONSTRAINT pk_name;
プライマリキーの名前指定して削除できひんの?
まぁ確かに考え方としてプライマリキーは単一キーだろうが複合キーだろうが、一つの構造に集約されるから分からんでもないけど・・・。
出来るんですよ、そう、Oracleならね。でも、MySQLでは出来ないらしい。
一応、構文そのものはエラーや余計なデータを作らずに通っているし、別にWebアプリ上で主キーの名前を厳格に付けていく必要もないから問題はないんだが・・・。
イマイチ解せないこの謎仕様。
まぁ、MySQLでは普通にこういう形でやりましょうってことなんやね。
ALTER TABLE table_name ADD PRIMARY KEY (id, col, ....);
CMSやフレームワークを使っているときはなかなか気にも留めないMySQLのかゆい所。
・・・MySQLってDBMSはやっぱりこんなもんなのかねぇ(´・ω・`)