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

  • 456
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

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はトランザクションの一部として実行され、コミット前であればロールバックによってキャンセルできる