サーバ

Mac OSX に MySQL インストール – PostgreSQL とのプチ非互換メモ

MySQL をインストールしたらあとは自家用掲示板アプリの移植です。
Hibernate とかいったカッコイイものは使っていないので非互換の SQL を手動で直していく必要がありました。

といっても直す必要があったのは2点だけ。

・サブクエリのマナー
insert 句の中で select をネストしていた部分が MySQL ではエラーになってしまいました。

mysql> insert into table1 (colmn1,colmun2) values('value1',(select count(*) from table1));
ERROR 1093 (HY000): You can't specify target table 'table1' for update in FROM clause

そんな複雑なクエリじゃないです。Oracle でもこれは通りますね。

MySQL では values のかわりに select 句をそのままもってくると良いようです。

mysql> insert into table1 (colmn1,colmun2) select 'value1', count(*) from table1;
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0

このクエリは PostgreSQL でも通りました。

・シーケンスは?
プライマリキーの生成にシーケンスを使っていましたが、MySQL にはシーケンスがないようです。
かわりにテーブル定義時に "AUTO_INCREMENT" と指定しておくと値を指定しなくても自動的にインクリメントしてくれる仕組みです。
SQL も一発で済むので楽ですね。
どんな値が入るか事前に知る必要がある場合はシーケンス発生用のテーブルを定義する必要がありそう。