データベースとテーブルを作る
データベースの構造を理解する
MySQLでは、データベース → テーブル → 行・列 という階層でデータを管理します。
- データベース? データを整理して保存・検索できるソフトウェア。Webアプリのユーザー情報や投稿データなどはここに保存される。 : プロジェクトやアプリケーション単位でまとめるコンテナ
- テーブル? データベース内のデータの入れ物。Excelのシートのように行と列でデータを管理する。 : 実際のデータを格納する表。「users」「products」など目的ごとに作る
- カラム? テーブルの列のこと。「名前」「メールアドレス」「作成日時」など、データの項目ごとに定義する。 (列): テーブルのフィールド定義(名前・年齢・メールアドレスなど)
- 行(レコード): 実際のデータ1件分
データベースを作成する
-- データベースを作成(文字コードを明示的に指定)
CREATE DATABASE myapp_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 既に存在してもエラーにしない
CREATE DATABASE IF NOT EXISTS myapp_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 作成したDBを選択
USE myapp_db;
utf8mb4 は日本語や絵文字にも対応した文字コードです。utf8 との違いは絵文字(4バイト文字)に対応しているかどうかで、現代のアプリでは utf8mb4 を使うのが標準です。
テーブルを作成する
基本的な CREATE TABLE
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL,
age INT,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
主要なデータ型
データ型? カラムに格納できる値の種類。INT(整数)・VARCHAR(可変長文字列)・DATE(日付)・BOOLEAN(真偽値)などがある。適切な型を選ぶとデータの整合性が保たれ、パフォーマンスも向上する。 の選択はテーブル設計で非常に重要です。
| データ型 | 説明 | 例 |
|---|---|---|
INT | 整数(-2億〜2億) | 年齢、個数 |
BIGINT | 大きな整数 | ユーザーID(大規模) |
VARCHAR(n) | 可変長文字列(最大n文字) | 名前、メール |
TEXT | 長い文字列 | 記事本文 |
DATE | 日付(YYYY-MM-DD) | 誕生日 |
DATETIME | 日時(YYYY-MM-DD HH:MM:SS) | 予約日時 |
TIMESTAMP | タイムスタンプ | 作成日時 |
BOOLEAN | 真偽値(TINYINT(1)のエイリアス) | フラグ |
DECIMAL(m,d) | 精度の高い小数 | 金額 |
カラムの制約
制約? カラムに設定するルール。NOT NULL(空値禁止)・UNIQUE(重複禁止)・PRIMARY KEY(主キー)・FOREIGN KEY(外部キー)・DEFAULT(デフォルト値)などがある。 を使うことで、データの整合性を保てます。
PRIMARY KEY(主キー)
主キー? テーブルの各行を一意に識別するためのカラム。通常は自動で採番される`id`が使われる。 はテーブル内のレコードを一意に識別するカラムです。NULLは許可されず、重複もできません。
-- 単一カラムの主キー
PRIMARY KEY (id)
-- 複合主キー(2つのカラムの組み合わせで一意)
PRIMARY KEY (user_id, product_id)
AUTO_INCREMENT(自動採番)
AUTO_INCREMENT? MySQLで主キーなどに使う自動採番機能。新しい行を挿入するたびに値が自動で1ずつ増える。手動でIDを管理する手間がなくなる。 を指定すると、INSERT時に自動で連番が振られます。
id INT NOT NULL AUTO_INCREMENT
NOT NULL と DEFAULT
-- NULLを許可しない
name VARCHAR(100) NOT NULL
-- デフォルト値を設定
status VARCHAR(20) NOT NULL DEFAULT 'active'
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
UNIQUE(ユニーク制約)
-- カラム定義に追加
email VARCHAR(255) NOT NULL UNIQUE
-- テーブル末尾に追加
UNIQUE KEY uk_email (email)
実践: productsテーブルを作る
CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
category VARCHAR(50),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
ON UPDATE CURRENT_TIMESTAMP は、レコードが更新されるたびに自動で現在時刻がセットされる便利なオプションです。
テーブル構造を確認する
-- テーブルの構造を確認
DESCRIBE users;
-- または
DESC users;
+-----------+--------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+-------------------+-------------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| age | int | YES | | NULL | |
| is_active | tinyint(1) | NO | | 1 | |
| created_at| timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+-----------+--------------+------+-----+-------------------+-------------------+
テーブル・データベースを削除する
-- テーブルを削除
DROP TABLE users;
-- 存在する場合のみ削除(エラー回避)
DROP TABLE IF EXISTS users;
-- データベースを削除(中のテーブルもすべて消える)
DROP DATABASE myapp_db;
注意:
DROP TABLEとDROP DATABASEは元に戻せません。本番環境では必ずバックアップを取ってから実行しましょう。
まとめ
CREATE DATABASEでデータベースを、CREATE TABLEでテーブルを作成する- データ型は用途に合ったものを選ぶ(文字列は
VARCHAR、整数はINTなど) PRIMARY KEY・NOT NULL・AUTO_INCREMENTは必ず覚えるDESCRIBE テーブル名でカラム定義を確認できる- 削除は
DROP TABLE/DROP DATABASE(元に戻せないので注意)
次回は実際にデータを挿入・取得する INSERT と SELECT を学びます。