ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本構文
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
age TINYINT UNSIGNED,
profile TEXT,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
主要なカラム型
| 型 | サイズ・範囲 | 用途 |
|---|---|---|
TINYINT | 1B / -128〜127 | 状態フラグ |
INT | 4B / 約 ±21 億 | 一般的な ID / 数量 |
BIGINT | 8B / 約 ±9.2×10^18 | 大規模 ID / Unix epoch ms |
DECIMAL(p,s) | 固定小数 | 金額 (DECIMAL(10,2) = 整数 8 桁 + 小数 2 桁) |
FLOAT / DOUBLE | 浮動小数 | 科学計算 (金額には使わない) |
CHAR(n) | n B 固定 | 長さが揃う文字列 (郵便番号など) |
VARCHAR(n) | 最大 n 文字 (≤65535B) | 名前 / メール / 短文テキスト |
TEXT | 最大 64KB | 長文 (ブログ本文) |
MEDIUMTEXT | 最大 16MB | 記事本文 |
LONGTEXT | 最大 4GB | ログ / 大量テキスト |
DATE | 3B | 誕生日 |
DATETIME | 8B | イベント時刻 (TZ 持たない) |
TIMESTAMP | 4B / 1970〜2038 | レコードのタイムスタンプ (TZ 持つ) |
BOOLEAN (= TINYINT(1)) | 1B | 真偽値 |
JSON | 可変 | 半構造データ |
ENUM('a','b') | 1〜2B | 固定列挙 |
主要な制約
CREATE TABLE orders (
-- 主キー (自動採番)
id BIGINT AUTO_INCREMENT PRIMARY KEY,
-- NOT NULL
user_id BIGINT NOT NULL,
-- DEFAULT
status VARCHAR(20) NOT NULL DEFAULT 'pending',
-- CHECK (MySQL 8.0+ / PostgreSQL)
amount DECIMAL(10,2) NOT NULL CHECK (amount >= 0),
-- UNIQUE
order_no VARCHAR(50) NOT NULL UNIQUE,
-- 複数列 UNIQUE
UNIQUE KEY uq_user_order (user_id, order_no),
-- インデックス
KEY idx_user_created (user_id, created_at),
-- 外部キー
CONSTRAINT fk_orders_user
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = InnoDB CHARSET = utf8mb4;
FOREIGN KEY の参照アクション
| アクション | 親が削除/更新されたら子は |
|---|---|
CASCADE | 連動して削除/更新 |
SET NULL | 外部キー列に NULL を入れる (NOT NULL では使えない) |
SET DEFAULT | DEFAULT 値にする (InnoDB は非対応) |
RESTRICT (= NO ACTION) | 子があるなら親の操作を拒否 (デフォルト) |
テーブル作成の便利構文
-- 既にあれば作らない
CREATE TABLE IF NOT EXISTS users ( ... );
-- 既存テーブルと同じ構造を作る (データは入らない)
CREATE TABLE users_backup LIKE users;
-- 既存データから新テーブルを作る (制約は引き継がない)
CREATE TABLE users_old AS
SELECT * FROM users WHERE created_at < '2020-01-01';
-- 一時テーブル (接続切れたら自動削除)
CREATE TEMPORARY TABLE tmp_sum AS
SELECT user_id, SUM(amount) AS total
FROM orders GROUP BY user_id;
ENGINE と CHARSET の意味
| 項目 | 推奨 | 理由 |
|---|---|---|
| ENGINE | InnoDB | トランザクション / 外部キー / 行ロック対応。MySQL 5.5+ で既定 |
| ENGINE | MyISAM (旧) | テーブルロック・トランザクション無し。新規利用非推奨 |
| CHARSET | utf8mb4 | 4 バイト UTF-8 = 絵文字対応。utf8 は 3 バイトで絵文字非対応 |
| COLLATE | utf8mb4_unicode_ci or utf8mb4_0900_ai_ci | 言語ソート / 大小区別の方針。日本語混在なら _unicode_ci |
命名のコツ
- テーブル名は複数形・スネークケース (
users/order_items) - 外部キー名は
fk_子テーブル_親テーブル(fk_orders_user) - UNIQUE は
uq_テーブル_カラム - インデックスは
idx_テーブル_カラム - 主キーは原則
id+BIGINT(将来 INT が枯渇するリスク回避)
変更系コマンド
-- カラム追加
ALTER TABLE users ADD COLUMN nickname VARCHAR(50);
-- カラム削除
ALTER TABLE users DROP COLUMN nickname;
-- カラム名・型変更 (MySQL)
ALTER TABLE users CHANGE name full_name VARCHAR(200) NOT NULL;
-- 型のみ変更
ALTER TABLE users MODIFY email VARCHAR(320);
-- インデックス追加
CREATE INDEX idx_email ON users (email);
-- テーブル削除
DROP TABLE users;
DROP TABLE IF EXISTS users;
FAQ
Q: VARCHAR と TEXT どちらを使えば?
A: 255 文字以内は VARCHAR、長文は TEXT。VARCHAR にもインデックス張れる、ソートも速い。
Q: DATETIME と TIMESTAMP の違い
A: TIMESTAMP は UTC で保存され接続のタイムゾーンに変換、範囲 1970〜2038。DATETIME はタイムゾーン非依存で 1000〜9999。長期保存系は DATETIME 推奨。
Q: 主キーを UUID にしたい
A: CHAR(36) (文字列) または BINARY(16) (バイナリ)。MySQL 8 なら関数 UUID_TO_BIN() / BIN_TO_UUID() あり。インデックス効率は連番より落ちる点に注意。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- NetBeansでTomcatを起動する手順|サーバ登録・ポート・トラブル対処 2026-09-07 07:45:13
- Laravel 記事一覧55件|環境構築・ルーティング・DB・エラー対処 2026-09-07 07:45:13
- Spring Framework 記事一覧31件|DI・設定・例外の対処 2026-09-07 07:45:13
- Javaの定数 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- hostnameコマンドの使い方|Windows・Linux・macOSでホスト名確認 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Oracle DROP USERでユーザー削除|CASCADE・接続中ユーザーの対処 2026-09-07 07:45:13
- SQLとは|DDL・DMLとリレーショナルデータベース操作の基本 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?