3秒でわかる
世界中の Web サービスで使われている無償のリレーショナルデータベース。SQL でデータを保存・検索でき、学習用の環境も手元にすぐ用意できます。
もう少し詳しく
どういうものか
MySQL は、表 (テーブル) の形でデータを保持し、SQL で操作するリレーショナルデータベース管理システムです。オープンソースとして公開されており、個人の学習から大規模なサービスまで無償で使えます。WordPress をはじめとする多くのソフトウェアが標準の保存先として採用しているため、レンタルサーバーの管理画面で名前を見かけることも多いはずです。
データを実際に読み書きする部分はストレージエンジンと呼ばれ、差し替えられる構造になっています。現在の既定は InnoDB で、トランザクションと外部キー制約に対応しています。
なぜ必要か
ファイルにデータを保存するだけなら SQL は要りません。しかし、複数の利用者が同時に同じ在庫を減らそうとしたときに矛盾を防ぐ、途中で失敗したら書き込み前に戻す、1000 万件から条件に合う数件を一瞬で見つける、といった要求はファイル操作では実装しきれません。データベースはこれらを既製品として提供します。
具体例
CREATE DATABASE shop DEFAULT CHARACTER SET utf8mb4;
USE shop;
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
member VARCHAR(50) NOT NULL,
amount INT NOT NULL,
ordered_at DATETIME NOT NULL
);
START TRANSACTION;
INSERT INTO orders (member, amount, ordered_at) VALUES ('田中', 1200, NOW());
<a href="/glossary/commit" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">COMMIT</a>;
SELECT member, SUM(amount) AS total
FROM orders
GROUP BY member
ORDER BY total DESC;つまずきやすいところ
文字コードの指定漏れは今も定番の事故です。古い設定のままだと utf8 という名前でありながら 3 バイトまでしか扱えず、絵文字や一部の漢字を保存した瞬間にエラーになるか文字が消えます。新規に作るときは utf8mb4 を明示します。
もう 1 つは、開発機で SQLite を使い本番だけ MySQL にする構成です。日付関数や大文字小文字の扱いが違うため、手元では動いたクエリが本番で落ちます。
似た用語との違い
| 名前 | 位置づけ |
|---|---|
| SQL | データベースを操作する言語 |
| MySQL | その言語を解釈して動く製品の 1 つ |
| MariaDB | MySQL から分岐した互換製品 |
| PostgreSQL | 別系統の製品で、機能の厳密さを重視 |
覚え方
SQL が「日本語」なら MySQL は「その言葉を話す担当者」です。言語と製品を分けて考えると混乱しません。