3.

テーブル関連

編集

本稿は MariaDB / MySQL のテーブル関連 SQL に関する記事です。テーブルの作成・確認・変更・削除・インデックス・外部キーといった、テーブルレベルの操作をまとめます。

子ページから項目を選択してください。

本ページの子ページ

テーブル関連 SQL の早見表

操作SQL
一覧表示SHOW TABLES;
定義の確認SHOW CREATE TABLE t; / DESC t;
テーブル作成CREATE TABLE t ( ... ) ENGINE=InnoDB CHARSET=utf8mb4;
削除DROP TABLE t;
名前変更RENAME TABLE old TO new;
全行削除 (高速)TRUNCATE TABLE t;
カラム追加ALTER TABLE t ADD COLUMN c INT NOT NULL;
カラム型変更ALTER TABLE t MODIFY c BIGINT NOT NULL;
カラム名変更ALTER TABLE t CHANGE old new INT;
インデックス追加CREATE INDEX idx_t_c ON t(c);
外部キー追加ALTER TABLE t ADD CONSTRAINT fk_x FOREIGN KEY (a) REFERENCES s(id);

典型的なテーブル作成

CREATE TABLE users (
  id         BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  name       VARCHAR(100) NOT NULL,
  email      VARCHAR(255) NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  deleted_at TIMESTAMP NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uk_email (email),
  KEY idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

主なデータ型

分類主な型用途
整数TINYINT / SMALLINT / INT / BIGINT必要桁に応じて選択
小数DECIMAL(p,s) / FLOAT / DOUBLE金額は DECIMAL
文字列CHAR(n) / VARCHAR(n) / TEXT長さに応じて
日時DATE / DATETIME / TIMESTAMPTZ を意識
論理値TINYINT(1) / BOOLEAN0/1
JSONJSON柔軟な構造を入れる
列挙ENUM('a','b')軽量だが拡張性に難
バイナリBLOB / VARBINARY画像・ファイル

キー / 制約

制約用途
PRIMARY KEY主キー (NULL 不可・一意)
UNIQUE一意制約
NOT NULLNULL 禁止
DEFAULT 値既定値
FOREIGN KEY外部キー
CHECK条件式 (MySQL 8.0.16+ で本格対応)
AUTO_INCREMENT自動採番

大きなテーブルへの ALTER の注意

  • 大規模テーブルへの ALTER TABLE長時間ロックすることがある
  • MySQL 5.6+ ではオンライン DDL がサポートされるが、操作内容によりロック・コピーが発生
  • 本番では pt-online-schema-changegh-ost などのツールでローテーション
  • レプリカ遅延に影響するので、夜間帯やメンテ時間に実施
  • 必ず事前バックアップリハーサルを行う

注意点

  • InnoDB を選ぶ (トランザクション・行ロック・外部キー)。MyISAM は新規利用を避ける
  • 文字コードは utf8mb4utf8 (3 バイト) は絵文字未対応
  • カラム名・テーブル名は小文字・スネークケースで統一すると OS 間移植時の混乱を避けられる
  • 巨大な TEXT/BLOB はテーブル本体を肥大化させる。S3 等の外部ストレージ+ URL 保存の検討
  • DROP TABLE / TRUNCATE はロールバック不可。事前バックアップを徹底

関連

編集
Post Share
子ページ
  1. テーブル作成
  2. カラムの定義変更
  3. カラム名の変更
  4. カラム追加 / 削除
  5. インデックスの作成
  6. インデックスの削除
  7. AUTO_INCREMENTの仕様について
  8. AUTO_INCREMENTの追加と確認方法
  9. 外部キーの追加/削除と制約名の確認方法
同階層のページ
  1. 基本構文
  2. データベース関連
  3. テーブル関連
  4. ユーザー関連
  5. メタデータ関連
  6. NULL判定を伴うCASE分の使用方法