PostgreSQL vs MySQL
PostgreSQLとMySQLの
SQL方言の違いを比較
Web開発でよく使われる2つのRDBMS。似ているようで少し違うSQLの書き方を、実際にブラウザで書き比べてみましょう。
CONCAT()と||、AUTO_INCREMENTとSERIALなど、目的は同じでもPostgreSQLとMySQLでは代表的な書き方が異なります。
SQL Dialects
代表的な書き方を比べてみる
まずは、実務でも違いに気づきやすい代表的な構文だけを並べてみます。
| やりたいこと | PostgreSQL | MySQL |
|---|---|---|
| 文字列結合 | a || b | CONCAT(a, b) |
| IDの自動採番 | SERIAL / IDENTITY | AUTO_INCREMENT |
| NULLの置換 | COALESCE() | IFNULL() |
| 大文字小文字を無視した検索 | ILIKE | 照合順序などに依存 |
| 件数制限 | LIMIT | LIMIT |
文字列結合は、違いがわかりやすい
PostgreSQLでは||で文字列を結合できます。
SELECT first_name || ' ' || last_name
FROM users;
MySQLではCONCAT()を使うのが代表的です。
SELECT CONCAT(first_name, ' ', last_name)
FROM users;
MySQLの通常設定では||は文字列結合ではなく論理ORとして扱われます。PostgreSQLで動いたSQLをそのままMySQLへ持っていったときに違いを体感しやすいポイントです。
自動採番も、書き方が違う
PostgreSQLの既存コードでは、自動採番列としてSERIALを目にすることがあります。
CREATE TABLE items (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
MySQLではAUTO_INCREMENTが代表的です。
CREATE TABLE items (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
Compare in Browser
読むより、書き比べるのが一番早い。
表を眺めるだけでも違いはわかりますが、実際にSQLを書くとさらに明確になります。
Miria SQL Learningでは、PostgreSQLモードとMySQLモードを切り替えながら、同じ目的のSQLをそれぞれの書き方で試せます。
Try Comparison
2つのDBを
書き比べよう。
アプリ内でモードを切り替えると、同じ構文でもエラーに
なったり、結果が変わるのを体験できます。
Related Guides
他のガイドを確認する
POSTGRESQL
PostgreSQLモード
SERIAL、RETURNING、ILIKEなど、PostgreSQLでよく使う書き方を確認します。
PostgreSQLガイドへMYSQL
MySQLモード
AUTO_INCREMENT、CONCAT()、IFNULL()など、MySQLらしい書き方を確認します。
MySQLガイドへRDBMS GUIDES
他のRDBMSも見る
Oracle DBやSQLiteを含めたRDBMS別のSQL方言ガイド一覧へ戻ります。
RDBMSガイド一覧へ