PHP
MySQL
SQL
SQLServer
SQLite3

【DBまとめ】MySQLからPostgreSQL,SQLiteまで

More than 3 years have passed since last update.


DBの違いまとめ


合わせて読みたい


DB一覧


MySQL

現在、世界中で最もよく利用されているオープンソースのデータベースのひとつです。

高速で使いやすいことが特徴です。


ABOUT


  • MySQLは非商用利用なら無償で入手して使える。

  • 商用利用の場合、ライセンスの購入が必要(デュアルライセンス)

  • マルチユーザ対応であるため、複数の人が同時に利用するWebアプリケーションのようなシステムに使うデータベースとして適している。

  • レンタルサーバーのデータベースとして使われていることが多く、数千万から数億件のレコードを取り扱っている事例も存在する

  • YahooやGoogleなどのサイトでも使用されている

  • シンプルで速く、PHPなどとの相性が良い分、弱点としてやや機能的な面で不十分さがあるとの指摘も


OTHERS


  • 文字列の連結に+演算子や||演算子を使うことができない。文字列の連結にはCONCAT()を使う

  • FULL JOIN句を利用できない

  • UNION以外の集合演算(EXCEPT, INTERSECT)に対応していない

  • 結果表が凸凹になるような集計関数の利用は許される。不足する列は自動的に補われるが、その際の値は不定。

  • 副問い合わせではLIMIT句を利用できない。

  • DDLやDCLが実行されると、バックグラウンドでコミットが行われるため、ロールバックでキャンセルできない

  • LOCK TABLE文の代わりにLOCK TABLES文を使う

  • テーブル定義時にAUTO_INCREMENT指定を列に加える事で連番を振ることができる


PostgreSQL

PostgreSQLは、MySQLと双璧をなすオープンソースのRDBMS製品です。

オープンソース製品の中では機能が豊富かつ標準SQLへの準拠度が比較的高い。


ABOUT


  • 標準SQLへの準拠度が高い

  • CPU数が増えた場合のスケーラビリティが高く、接続数が増えても性能が維持される

  • マルチバイト対応

  • PostGISというGIS(地理情報システム)を扱うアドオンソフトがあり、使い勝手が比較的良い


OTHERS


  • テーブル名などは大文字小文字を区別しない

  • 大文字を使いたい場合は"を使用する必要がある

  • DDL文もトランザクション処理の一部として管理されるため、コミット前であればロールバックによりキャンセルできる

  • テーブル定義時にAUTO_INCREMENT指定を列に加える事で連番を振ることができる


SQLite

SQLiteはアプリケーションの一部に組み込まれて動作するタイプのオープンソースのRDBMS。

大規模利用には向かず、多くのDBMSがサポートする機能や関数のうちから、SQLiteがサポートしていないものある。

一方で、その手軽さと高速な動作から中小規模の開発で活用されている。


ABOUT


  • 著作権を放棄しパブリックドメインに帰属

  • サーバではなくライブラリ

  • データ型を指定する必要がない


OTHERS


  • 列を定義する際、データ型を特に指定しなくても良い

  • 集計関数を用いた検索の結果が凸凹になっても良い

  • ALL演算子やANY演算子が使用できない

  • RIGHT JOIN句とFULL JOIN句が利用できない

  • DDL文はトランザクション処理の一部として管理されるため、コミット前であればロールバックによりキャンセルできる

  • 分離レベルの指定にSET TRANSACTION ISOLATOIN LEVELを使えず、4つの基本的な分離レベルも使えない。

  • ロックのコントロールは、BEGIN文の後ろにDEFERRED, IMEDEATE, EXCLUSIVEと指定することで行う

  • TRUNCATE TABLE文はサポートされない

  • ユーザーやアクセス権限の概念がなく、GRANT文やREVOKE文も使用できない


Oracle DB



非常に高機能なDBMS。

過去のバージョンの言語仕様に対応するため、標準SQLとは互換性のない独自構文の利用が求められることもある。


ABOUT


  • エスカレーションの発生しない「行レベル * ロック」

  • 読み取り一貫性

  • 企業システムのため、さまざまなニーズを満たす拡張機能がある


OTHERS


  • 日本語を含むマルチバイトのテーブル名や列名を使う場合、正式にはダブルクオーテーションマークでくくらなければならない

  • ALL演算子やANY演算子は副問い合わせと組み合わせなくても利用が可能

  • 表に別名を付ける場合、ASの記述は不要

  • 一部の演算子の利用がWHERE句内に限られるため、選択列リストなどで利用できない場合がある。

  • BEGIN文を使わずとも自動的にトランザクションが開始する

  • DDLやDCLの実行は、その直後に自動的にコミットされる

  • ALTER TABLE文では、ADDやDROP以降の内容を丸括弧でくくる必要がある

  • CREATE SEQUENCE文でシークエンスを作成し、連番を振る。

  • 作成直後のシーケンスは値を持っていないため、CURRVALで値を得る前にNEXTVALを実行する必要がある。


SQL Server

マイクロソフト系システム開発で幅広く利用されている。

関数や型の種類、ロック機構などに独自性がいくらかみられる。


ABOUT


  • Microsoft Windowsと親和性が高い


OTHERS


  • 文字列の連結に||演算子やCONCAT()を利用できず、+演算子を用いる

  • LIMIT句が利用できない代わりに、SELECT TOP 10 列名 FROM ~のようにTOPを利用する

  • トランザクションの開始にはBEGIN TRANSACTION文を使う

  • DDLやDCLの実行はトランザクションの一部として扱われ、コミットする前であればロールバックすることができる

  • CREATE SEQUENCE文でシーケンスを作成できる他、テーブル定義時にIDENTITY指定を列に加える事で連番を振ることができる


DB2

DB2は大規模システム構築などで世界的に使われている商用RDBMS。

Oracle DB同様に長い歴史を豊富な機能を有する。

一部に独自構文も見られる。


ABOUT


  • IBMで初めて登場したリレーショナルデータベース用のミドルウェア

  • IBMはリレーショナルデータベースの概念を世界で初めて提唱したが、製品の出荷はオラクルが先立った

  • メインフレーム用からパーソナル * コンピュータ用までのマルチプラットフォーム対応


OTHERS


  • LIMIT句がデフォルトでは利用できない代わりに、FETCH文を使った指定ができる

  • SELECT文でFROM句は省略できず、SYSIBM.SYSDUMMY1テーブルを使う。

  • BEGIN文を使わずとも自動的にトランザクションが開始する。

  • DDLやDCLの実行はトランザクションの一部として扱われ、コミットする前であればロールバックすることができる。

  • ALTER TABLE文で列のDROPを行うことができない。

  • TRUNCATE TABLE文が使えない代わりに、ALTER TABLE文でACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE指定を行う


H2 Database

H2 DatabaseはJavaで実装されたオープンソースRDBMSで、その意味でApache Derbyと同じ。

単独で動作する他、SQLiteのように組み込みで動作させることもできる。

それによって、テストや中小規模での利用が急速に広まっている。


ABOUT


  • 組み込みモードでも、クライアント * サーバーモードでも動作する

  • サイズが小さく、約1MB

  • インメモリデータベース、暗号化データベースを作れる

  • クラスタリングや分散トランザクションに対応している


OTHERS


  • FULL JOIN句を利用することができない

  • DDLはトランザクションの一部として実行できず、ロールバックによってキャンセルできない

  • 分離レベルの指定にSET TRANSACTION ISOLATOIN LEVELを使えず、4つの基本的な分離レベルも使えない。

  • SET MOTE文を用いると、DB2, Derby, SQL Server, MySQL, Oracle DB, PostgreSQLなどをエミュレーションするよう動作を変更できる。


Apache Derby

HS Database同様、Javaで実装されたオープンソースのRDBMS。

JDK(Java開発キット)に標準添付されている。

小規模Javaアプリケーションへの組み込みなどで活用されている。

細部において、他のDBMSや標準SQLとの互換性に欠ける実装が見受けられる。


ABOUT


  • IBMから寄贈されたCloudscapeのソースコードを元に、Apacheソフトウェア財団によって開発が進められている

  • ロゴはダービー帽に掛けている


OTHERS


  • SELECT文の選択列リストに、NULLを記述することが許されない

  • IN演算子のパラメータの中に、NULLを記述することが許されない

  • トランザクションは自動的に開始されるため、BEGIN句は不要

  • SELECT文においてFROM句を省略することが許されないため、SYSIBM, SYSDUMMY1テーブルなどのダミーテーブルを利用する

  • DDLはトランザクションの一部として実行され、コミット前であればロールバックによってキャンセルできる