この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
更新日時:2026-05-13 08:53:45
タイトル: テーブル関連
SEOタイトル: MariaDB・MySQLのテーブル操作SQL|CREATE TABLEとALTER TABLE
本稿は 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 / TIMESTAMP | TZ を意識 |
| 論理値 | TINYINT(1) / BOOLEAN | 0/1 |
| JSON | JSON | 柔軟な構造を入れる |
| 列挙 | ENUM('a','b') | 軽量だが拡張性に難 |
| バイナリ | BLOB / VARBINARY | 画像・ファイル |
キー / 制約
| 制約 | 用途 |
| PRIMARY KEY | 主キー (NULL 不可・一意) |
| UNIQUE | 一意制約 |
| NOT NULL | NULL 禁止 |
| DEFAULT 値 | 既定値 |
| FOREIGN KEY | 外部キー |
| CHECK | 条件式 (MySQL 8.0.16+ で本格対応) |
| AUTO_INCREMENT | 自動採番 |
大きなテーブルへの ALTER の注意
- 大規模テーブルへの
ALTER TABLE は長時間ロックすることがある
- MySQL 5.6+ ではオンライン DDL がサポートされるが、操作内容によりロック・コピーが発生
- 本番では pt-online-schema-change、gh-ost などのツールでローテーション
- レプリカ遅延に影響するので、夜間帯やメンテ時間に実施
- 必ず事前バックアップとリハーサルを行う
注意点
- InnoDB を選ぶ (トランザクション・行ロック・外部キー)。MyISAM は新規利用を避ける
- 文字コードは utf8mb4。
utf8 (3 バイト) は絵文字未対応
- カラム名・テーブル名は小文字・スネークケースで統一すると OS 間移植時の混乱を避けられる
- 巨大な
TEXT/BLOB はテーブル本体を肥大化させる。S3 等の外部ストレージ+ URL 保存の検討
- DROP TABLE / TRUNCATE はロールバック不可。事前バックアップを徹底
関連