本格的にやるかどうか悩んでる方にとって、学習する際に係るコストは出来るだけ排除したいものです。
そこで今回は、MySQLというオープンソースデータベースについての解説を行っていきたいと思います。
MySQLとはどんなものなのか?他のデータベースと何が違うのか?など、具体的な内容にも言及していきますので一読してみてください。
MySQLとは
MySQLは恐らく、世界で最も有名なオープンソース型のデータベースだと言えるでしょう。
オープンソースということで一昔前までは個人使用を中心に人気が広がっていましたが、今現在では商用でも人気が伸びてきていることから使い勝手の良さも伺えます。
開発元はスウェーデンのMySQL ABという企業ですが、まずこの企業がJavaで有名なサン・マイクロシステムズに買収され、その後にサン・マイクロシステムズをOracle社が買収したため、現在ではライセンスはOracle社のものとなっています。
リレーショナルデータベース
まず知っておかなければならないのは、MySQLはリレーショナルデータベースとだということです。
リレーショナルデータベースとは、列と行からなる「事前定義された関連のあるデータ項目の集合体」を指します。
リレーショナルデータベースはMySQL以外にも以下のデータベースがあります。
- Amazon Aurora
- Oracle Database
- Microsoft SQL Server
- PostgreSQL
- MariaDB
ここで敢えてリレーショナルデータべースだと宣言した理由には、近年台頭してきたリレーショナルデータベースに置き換わる可能性を持った別のデータベースがあるからです。
この記事では具体的な説明は避けますが、”NoSQL”という言葉を耳にしたことがある方もいると思います。
このNoSQLの”No”は”Not only”の略であり、NoSQLはSQLに限定されないリレーショナルデータベース以外のデータベース全般を指します。
ライセンスについて
先ほどから何度もMySQL=無料と説明してきましたが、その理由としてはMySQLがデュアルライセンスであることが挙げられます。
このデュアルライセンスとは完全無償のGPLライセンスと有償の商用ライセンとで別れています。
また商用ライセンスに至っては更に三つに細分化されています。
大まかな区分けは次の通りです。
配布条件 | サポート | |
---|---|---|
無償 | ・完成したソフトウェアを無償公開する ・公開したソフトウェアの改変および再配布を許可する |
技術サポートなし |
有償 | ・完成したソフトウェアを無償公開しない ・公開したソフトウェアの改変および再配布を許可しない |
技術サポートあり |
MySQLのシェア
MySQLは先にも述べたように世界でも高い評価を受けています。
それを裏付けるのが次のDB-Engineランキングです。
ランキングを見るとOracle社のDBが上位2位を独占している状態となっていることがわかります。
MySQLの主な機能と特徴
MySQLには非常に多くの機能が備わっていますが、代表的なもので言うと次のようなものが挙げられます。
- 情報スキーマ
- ビュー
- パーティショニング
- クエリオプティマイザ
- トリガ
- クラスタリング
- トランザクション管理
- 副問い合わせ
- コネクタ
Oracle社が元々開発していたOracle Databaseと比べると機能的には若干の物足りなさはあるものの、中規模開発までなら使い勝手の良さで逆にMySQLに軍配が上がることもしばしばあります。
また基本的な部分では、Oracle DatabaseやPostgreSQLと比べ、動作が非常に高速であるという特徴もあります。
Oracle Databaseとの違いについて
親会社は一緒のこの二つのDBですが、仕様については若干の差異が発生します。
この差異によりアプリケーションやデータを移植させる場合には注意が必要となります。
これらの違いについてですが、例えば具体的には次のような点が挙げられます。
NULLと空文字の仕様が異なる
Oracle | NULLと空文字を区別しない |
MySQL | NULLと空文字は別のものとして区別される |
型の指定方法が異なる
Oracle | ・数値型:NUMBER ・文字列型:CHAR / VARCHAR2 |
MySQL | ・数値型:INTEGER / NUMBER ・文字列型:CHAR / VARCHAR |
書式が異なる
Oracle | ‘YYYY-MM-DD HH24:MI:SS’ |
MySQL | ‘%Y-%M-%D H%:i%:s%’ |
命令句の違い
上記のほかにも、使用できる命令句が異なる点には注意が必要です。
次ではその例をいくつか挙げてみます。
MINUS
Oracle Databaseにある集合演算子でMINUSというものがありますが、MySQLにはこのMINUSが存在しない為、「NOT EXISTS」で書き換える必要があります。
// Oracle Databaseの場合 SELECT * FROM sample_table_A MINUS SELECT * FROM sample_table_B // MySQLでは次のように記述する SELECT * FROM sample_table_A WHERE NOT EXISTS ( SELECT * FROM sample_table_B WHERE sample_table_A.id = sample_table_B.id )
TRUNC
Oracle Databaseで使用する関数で「TRUNC」というものがありますが、これもMySQLでは書き換える必要があります。
// Oracle Databaseの場合 TRUNC(99.999) // 若しくは TRUNC(99.999, 0) // MySQLでは次のように記述する TRUNCATE(99.999, 0)
文字列の連結
文字列の端に別の文字列を追加するための演算子についても若干の違いがあります。
Oracle Databaseでは文字列の連結には「||」という連結演算子が使用できますが、MySQLでは「||」という演算子は論理演算子として解釈されるため文字列を連結させる用途としては使用できません。
// Oracle Databaseの場合 SELECT CONCAT('文字列A', '文字列B', ・・・) // 若しくは SELECT '文字列A' || '文字列B' // MySQLでは次のように記述する SELECT CONCAT('文字列A', '文字列B', ・・・)
まとめ
いかがでしたか?
今回はMySQLの「他のデータベースとの違い」について解説してみました。
当然Oracle databaseとMySQLだけではなく、他のDBとも若干の違いは出てくるケースがあります。
DBを移行する場合にはその辺りを踏まえて用意しておかなければ、いざ移行してみたらとんでもない数のエラーが出力されたということも十分考えられますので事前にDB毎の特徴を把握しておいた方が良いでしょう。