TOPサーバ構築・運用> INSERT文
徹底比較!! PostgreSQL vs MySQLパート2
徹底比較!! PostgreSQL vs MySQLパート2

第2回:拡張部分によって違いがでてくるSQL文
著者:NTTデータ   藤塚 勤也   2007/4/18
前のページ  1  2  3
INSERT文

   通常INSERT文は、1レコードを挿入するために使用するSQL文です。ところがMySQLでは、1つのINSERT文にて複数のレコードを挿入することができます。例えば、前述した表1のtableAに2レコード挿入するためのINSERT文は以下のようになります。
insert into tableA values ('1','A1'),('2','A2');

   これは、PostgreSQLのバージョン8.1系ではサポートしていませんでしたが、バージョン8.2系からサポートするようになりました。

   通常のアプリケーションの中で、このようなINSERT文を使用することはあまりないと思いますが、コマンドラインツールなどからいくつかのテストデータを挿入する時などには、非常に便利です。


UPDATE文とDELETE文

   MySQLのUPDATE文とDELETE文には、特徴的な機能があります。それは、ORDER BY句とLIMIT句が使用できる点です。前述の表3のtableCを使って簡単な例を見てみましょう。以下は、カラム「col02」の値が一番小さいレコードのカラム「col01」の値を「C」に更新するUPDATE文と同様にカラム「col02」の値が一番小さいレコードを削除するDELETE文です。

update tableC set col01 = 'C' order by col02 limit 1;
select * from tableC;
 C     |     5
 B     |    10
 A     |    15

delete from tableC order by col02 limit 1;
select * from tableC;
 B     |    10
 A     |    15


   このUPDATE文とDELETE文はPostgreSQLでは実行できません。もし、PostgreSQLで同様の処理を1つのSQL文で実施しようと考えると、以下のように副問い合わせを利用することになります。

update tableC set col01 = 'C' where col02 = (select col02 from tableC order by col02 limit 1);
select * from tableC;
 C     |     5
 B     |    10
 A     |    15

delete from tableC where col02 = (select col02 from tableC order by col02 limit 1);
select * from tableC;
 B     |    10
 A     |    15


まとめ

   PostgreSQLとMySQLで使用できるSQL文を比較してみると、おおむねMySQLの方が標準仕様から拡張されている部分が多いといます。しかし、あまり標準仕様から逸脱した部分を活用すると、そのアプリケーションを他のRDBMSに適用しようとした場合に多くの修正が必要になってしまいますので注意が必要です。

   また、拡張されている部分は、基本的にそのRDBMSの特徴を引き出すための仕様であることも多いと思います。そのことをよく理解したうえで、拡張部分を使用するのがよいと思います。

   なお、今回取り上げたPostgreSQLとMySQLでのSQL文の違いは、ほんの一部です。他にも様々な違いがありますので注意が必要です。

前のページ  1  2  3


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第2回:拡張部分によって違いがでてくるSQL文
  SQL文の違い
  JOIN
INSERT文