3秒でわかる
データベースが情報を行と列でしまっておく入れ物。どんな項目をどの型で持つかを先に決めておくことで、SQL から安全に検索・更新できるようになります。
30秒図解
もう少し詳しく
どういうものか
テーブルは、リレーショナルデータベースがデータをしまう単位です。横方向の 1 件分のまとまりを行 (レコード)、縦方向の項目を列 (カラム) と呼びます。1 つのテーブルには「何の集まりか」がはっきりした 1 種類のものだけを入れます。会員なら会員、注文なら注文で、混ぜません。
Excel のシートと似て見えますが、決定的に違う点が 2 つあります。列ごとに型が固定されていること、そして行に順番の概念が無いことです。数値の列に文字を書き込もうとすればデータベース側が拒否します。逆に「上から 3 行目」という指定はできず、欲しい行は必ず条件で絞り込みます。
なぜ必要か
型と制約をテーブルに持たせておくと、アプリ側のバグがデータを壊すのを水際で止められます。price を NOT NULL にしておけば、価格の抜けた商品は最初から insert できません。1 か所で守れば全部のプログラムに効くので、アプリを複数書いても矛盾したデータが増えません。
具体例
CREATE TABLE members (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
points INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL
);
INSERT INTO members (name, email, created_at)
VALUES ('田中', 'tanaka@example.com', NOW());
SELECT name, points FROM members WHERE points >= 100;email に UNIQUE を付けたので、同じアドレスでの二重登録はデータベースが弾きます。
つまずきやすいところ
住所や電話番号を 1 つの列にまとめて「, 」区切りで押し込む書き方は、後で必ず苦しくなります。2 番目の電話番号だけ取り出す SQL が書けず、文字列を切り貼りする羽目になるからです。項目が増えそうなものは、最初から別テーブルに分けて id で結びます。
もう 1 つは主キーの付け忘れです。主キーが無いと、同じ内容の行が 2 件できたときにどちらを消せばいいのか指定できません。
似た用語との違い
覚え方
「1 テーブル = 1 種類のものの台帳」と考えます。台帳の見出し行が列、1 件ずつの記入が行です。