PostgreSQL vs MySQL

PostgreSQLとMySQLの
SQL方言の違いを比較

Web開発でよく使われる2つのRDBMS。似ているようで少し違うSQLの書き方を、実際にブラウザで書き比べてみましょう。

CONCAT()||AUTO_INCREMENTSERIALなど、目的は同じでもPostgreSQLとMySQLでは代表的な書き方が異なります。

PostgreSQLミリア MySQLミリア

SQL Dialects

代表的な書き方を比べてみる

まずは、実務でも違いに気づきやすい代表的な構文だけを並べてみます。

やりたいこと PostgreSQL MySQL
文字列結合a || bCONCAT(a, b)
IDの自動採番SERIAL / IDENTITYAUTO_INCREMENT
NULLの置換COALESCE()IFNULL()
大文字小文字を無視した検索ILIKE照合順序などに依存
件数制限LIMITLIMIT
CONCAT vs ||

文字列結合は、違いがわかりやすい

PostgreSQLでは||で文字列を結合できます。

PostgreSQL
SELECT first_name || ' ' || last_name
FROM users;

MySQLではCONCAT()を使うのが代表的です。

MySQL
SELECT CONCAT(first_name, ' ', last_name)
FROM users;
同じ「||」をそのまま持っていくと?

MySQLの通常設定では||は文字列結合ではなく論理ORとして扱われます。PostgreSQLで動いたSQLをそのままMySQLへ持っていったときに違いを体感しやすいポイントです。

AUTO INCREMENT

自動採番も、書き方が違う

PostgreSQLの既存コードでは、自動採番列としてSERIALを目にすることがあります。

PostgreSQL
CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

MySQLではAUTO_INCREMENTが代表的です。

MySQL
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

他のガイドを確認する

Miria SQL Learning

PostgreSQLとMySQL、
両方書いて比べてみよう。

環境構築なし。
ブラウザ上でRDBMSを切り替えて試せます。

PostgreSQL / MySQL をブラウザから体験