本稿は MariaDB / MySQL のテーブル関連 SQL に関する記事です。テーブルの作成・確認・変更・削除・インデックス・外部キーといった、テーブルレベルの操作をまとめます。
子ページから項目を選択してください。
本ページの子ページ
- テーブル作成 —
CREATE TABLE - カラムの定義変更 —
ALTER TABLE ... MODIFY - カラム名の変更 —
ALTER TABLE ... CHANGE - カラム追加 / 削除 —
ALTER TABLE ... ADD/DROP COLUMN - インデックスの作成 —
CREATE INDEX - インデックスの削除 —
DROP INDEX - AUTO_INCREMENT の仕様について
- AUTO_INCREMENT の追加と確認方法
- 外部キーの追加/削除と制約名の確認方法
テーブル関連 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 ( |
主なデータ型
| 分類 | 主な型 | 用途 |
|---|---|---|
| 整数 | 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 はロールバック不可。事前バックアップを徹底
関連
- 親カテゴリ: SQL (MariaDB)
- 関連: データベース関連 / ユーザー関連 / パフォーマンスチューニング
子ページ
同階層のページ
- 基本構文
- データベース関連
- テーブル関連
- ユーザー関連
- メタデータ関連
- NULL判定を伴うCASE文の使用方法
人気ページ
- 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アノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38