概要

ch01〜ch10 では PDO で「3 DB 共通の世界」を歩いてきた。この章からは 個別の DB に降りていく。MySQL は WordPress / Laravel など PHP 圏で最も採用例が多く、RDS / Cloud SQL でもデフォルト級で業務では避けて通れない。

MySQL 固有で最初に出会うのが AUTO_INCREMENTid INT AUTO_INCREMENT PRIMARY KEY で INSERT 時に自動で連番 ID を振る。文字コードは utf8mb4 を必ず指定する (古い utf8 は最大 3 byte で絵文字や一部漢字が壊れる)。ENGINE=InnoDB を選べばトランザクションと外部キー制約が使える。

スキーマ確認は SHOW TABLES / DESCRIBE / SHOW CREATE TABLE のように SHOW 系の独自構文。データ型は TINYINT INT BIGINT VARCHAR(n) TEXT DATETIME TIMESTAMP が定番で、特に TIMESTAMPUTC 保存・取り出し時に TZ 変換 されるので注意。TRUNCATE は DELETE と違って AUTO_INCREMENT をリセットしロールバック不可なので使い分けを意識する。

学習目標

このチャプターが終わると、次のことが言える / 書ける。

前提

db トピック ch01〜ch10 を理解していること (PDO 接続 / SELECT / INSERT / UPDATE / DELETE / prepare / execute / トランザクション / マルチ DB 対応まで)。

ドリル

no 内容
01 AUTO_INCREMENT を持つテーブルに 3 件 INSERT して自動採番 ID を確認
02 SHOW TABLES 相当の操作でテーブル一覧を出力 (driver 別分岐)
03 TRUNCATEDELETE の挙動を比較 (件数の前後を観察)

ハマりどころ

演習: ドリル 01 — AUTO_INCREMENT で連番 ID を自動採番する

問題

items テーブル (採点ランナーが空で用意) に対して、PDO の prepared statement で次の 3 件を順番に INSERT する。

  1. りんご
  2. みかん
  3. ぶどう

INSERT 後に SELECT id, name FROM items ORDER BY id で取り出し、{id}: {name} の形式で 1 行ずつ出力する。

期待される出力

1: りんご
2: みかん
3: ぶどう

ヒント

学ぶこと

演習: ドリル 02 — テーブル一覧を取得する (driver 別の SHOW TABLES 相当)

問題

採点ランナーが usersposts の 2 テーブルを用意する。これらのテーブル名を アルファベット順 で 1 行ずつ出力する。

DB ごとにテーブル一覧の取り方が違うので、DOJO_DB_DRIVER (sqlite / mysql / pgsql) で分岐する。

driver 取り方
sqlite SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name
mysql SHOW TABLES
pgsql SELECT tablename FROM pg_tables WHERE schemaname = current_schema() ORDER BY tablename

期待される出力

posts
users

ヒント

学ぶこと

演習: ドリル 03 — TRUNCATE と DELETE の挙動を比較する

問題

採点ランナーが items テーブルに 3 件のレコードを用意する。

  1. SELECT COUNT(*) FROM items で件数を取得し、before: {N} を出力
  2. 全件削除する
    • MySQL なら TRUNCATE TABLE items
    • SQLite / PostgreSQL は DELETE FROM items (SQLite に TRUNCATE は無い・PostgreSQL は TRUNCATE もあるが ここでは DELETE で統一)
  3. 削除後にもう一度 SELECT COUNT(*) FROM items で件数を取り、after delete: {N} を出力

期待される出力

before: 3
after delete: 0

ヒント

学ぶこと (本質)

この章を AI に聞く

  1. 「ch11 — MySQL 固有の文法と運用」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch11 — MySQL 固有の文法と運用」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch11 — MySQL 固有の文法と運用」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch11 — MySQL 固有の文法と運用」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE