本稿は MariaDB / MySQL のテーブル関連 SQL に関する記事です。テーブルの作成・確認・変更・削除・インデックス・外部キーといった、テーブルレベルの操作をまとめます。
子ページから項目を選択してください。
本ページの子ページ
- テーブル作成 —
CREATE TABLE - カラムの定義変更 —
ALTER TABLE ... MODIFY - カラム名の変更 —
ALTER TABLE ... CHANGE - カラム追加 / 削除 —
ALTER TABLE ... ADD/DROP COLUMN - インデックスの作成 —
CREATE INDEX - インデックスの削除 —
DROP INDEX - AUTO_INCREMENT の仕様について
- AUTO_INCREMENT の追加と確認方法
- 外部キーの追加/削除と制約名の確認方法
作成・変更の前に、定義と利用側を確認する
この9本が本ページの実際の子ページです。新しい表なら「テーブル作成」、型/NULL/既定値等なら「カラムの定義変更」、名前だけなら「カラム名の変更」へ進みます。インデックスや外部キー、AUTO_INCREMENTはそれぞれの子ページで別に確認してください。以降の早見表を上から順に実行する必要はありません。
最初は読取だけで対象を確かめる
SELECT VERSION() AS server_version, DATABASE() AS selected_database,
@@SESSION.sql_mode AS session_sql_mode, @@SESSION.time_zone AS session_time_zone;
接続先の製品/版、現在のDB、セッションのstrictモード等を読みます。DATABASE()がNULLなら既定DBが未選択です。アプリの接続先と同じサーバー/DBを見ているかを確認し、表示エラーを消すためのCREATE/ALTERへ進みません。実際の内部名やログの全文は公開しないでください。
対象表ではSHOW CREATE TABLEと列の属性を読み、DDL後に保持したい型・符号・NULL・既定値・コメント・charset/collationを記録します。列一覧だけでは、外部キー、索引、生成式、trigger/view、利用側の旧SQLまで点検したことにはなりません。定義出力にも業務上の情報があるため、必要な部分だけ扱います。
DDLの成功、データ保持、サービスの継続は別
MySQL/MariaDBの通常のCREATE/ALTER等は、アプリのDMLと同じROLLBACKで取り消せるとは限りません。検体でCREATE後にROLLBACKしても表は残りました。atomic DDLという実装上の説明と、利用者が任意の変更を取り消せることを混同しません。バックアップの取得だけでなく、戻す対象/復元方法/利用側の互換性も計画します。
INSTANTやLOCK=NONEでも、metadata lockや切替の待ちは別にあります。検体では同じINSTANTのADDが、別接続の未終了transactionで1205となり、transaction終了後に成功しました。「数ミリ秒」「ロックなし」「停止時間ゼロ」という一律の約束にはできません。
型や制約の名前だけで同一視しない
BOOLEANはMySQL/MariaDBでTINYINTの別名ですが、0/1以外の値を禁止する制約ではありません。検体では2を保存できました。JSONもMySQLの型とMariaDBのLONGTEXT系aliasで表現が異なります。同じSQLの見た目から格納形式や全関数・replicationの互換性まで保証しません。
整数の符号/幅、文字列の文字数とbyte、日時の小数秒精度/時刻範囲/タイムゾーン変換も別に確認します。たとえばTIMESTAMPの2038年上限をMariaDB全版へ一般化できません。MySQL8.4.13検体は2040年を拒否し、MariaDB11.8.9検体はUTC条件で保存できました。
オンライン変更ツールは別途の設計が必要
pt-online-schema-change/gh-ostを導入すれば自動的に安全になるわけではありません。対応製品/版、主キー等、外部キー/trigger、binlog、負荷/遅延、切替ロックと失敗時の残存物を確認します。rootや秘密値をコマンド行へ直書きする旧例をそのまま利用しません。
とくにpt-online-schema-changeのdry-runも新表の作成/ALTERを伴い、完全な読取専用ではありません。両ツールの実行・導入は今回していません。既存のDDLやデータへ接続して試さず、必要なら別の承認済み検証計画で扱います。
テーブル関連 SQL の早見表
旧例の注意:操作比較の表です。DROP/TRUNCATEやカラム変更を順次実行しません。読み取りとDDLを分け、ALTERは残す全属性を調べます。
| 操作 | SQL |
|---|---|
| 一覧表示 | SHOW TABLES; |
| 定義の確認 | SHOW CREATE TABLE t; / DESC t; |
| テーブル作成 | CREATE TABLE t ( ... ) ENGINE=InnoDB CHARSET=utf8mb4; |
| 削除 | DROP TABLE t; |
| 名前変更 | RENAME TABLE old TO new; |
| 全行削除(DDL。無条件の速度保証ではない) | 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); |
典型的なテーブル作成
旧例の注意:元のusers作成例を保持したものです。既存表へ実行せず、照合順序/一意性/名前を実要件へ合わせます。
|
CREATE TABLE users ( |
主なデータ型
旧例の注意:型の用途の概要です。BOOLEAN/JSON/日時/格納範囲は製品/版ごとに確認します。
| 分類 | 主な型 | 用途 |
|---|---|---|
| 整数 | TINYINT / SMALLINT / INT / BIGINT | 必要桁に応じて選択 |
| 小数 | DECIMAL(p,s) / FLOAT / DOUBLE | 金額は DECIMAL |
| 文字列 | CHAR(n) / VARCHAR(n) / TEXT | 長さに応じて |
| 日時 | DATE / DATETIME / TIMESTAMP | TZ を意識 |
| 論理値 | TINYINT(1) / BOOLEAN | 0/1用途の型alias。2等を禁止するCHECKではない |
| JSON | JSON | 製品ごとの格納/検証/関数を確認。MariaDBはLONGTEXT系alias |
| 列挙 | ENUM('a','b') | 軽量だが拡張性に難 |
| バイナリ | BLOB / VARBINARY | 画像・ファイル |
キー / 制約
旧例の注意:DEFAULT/AUTO_INCREMENTは全てが同じ種類の制約という意味ではありません。CHECKやFKの版/engine対応も確認します。
| 制約 | 用途 |
|---|---|
| PRIMARY KEY | 主キー (NULL 不可・一意) |
| UNIQUE | 一意制約 |
| NOT NULL | NULL 禁止 |
| DEFAULT 値 | 既定値 |
| FOREIGN KEY | 外部キー |
| CHECK | 条件式 (MySQL 8.0.16+ で本格対応) |
| AUTO_INCREMENT | 自動採番 |
大きなテーブルへの ALTER の注意
- 大規模テーブルへの
ALTER TABLEは長時間ロックすることがある - MySQL 5.6+ ではオンライン DDL がサポートされるが、操作内容によりロック・コピーが発生
- 外部ツールは製品/版/FK/trigger/binlog等の要件と切替リスクを確認。標準の本番必須手順にはしない
- レプリカ遅延に影響するので、夜間帯やメンテ時間に実施
- 必ず事前バックアップとリハーサルを行う
注意点
- InnoDB を選ぶ (トランザクション・行ロック・外部キー)。MyISAM は新規利用を避ける
- 文字コードは utf8mb4。utf8というaliasの対応先は製品/版/設定を確認。utf8mb3は4byte文字に対応しない
- カラム名・テーブル名は小文字・スネークケースで統一すると OS 間移植時の混乱を避けられる
- 巨大な
TEXT/BLOBはテーブル本体を肥大化させる。S3 等の外部ストレージ+ URL 保存の検討 - DROP TABLE / TRUNCATE はロールバック不可。事前バックアップを徹底
関連
- 親カテゴリ: SQL (MariaDB)
- 関連: データベース関連 / ユーザー関連 / パフォーマンスチューニング
確認範囲と関連ページ
2026年10月26日確認。新12SQLを新規tmpfs MySQL8.4.13/MariaDB11.8.9-ubu2404で実行し各15/計30試験に成功。既存表/複製、列の属性/値、strictな縮小とNULL拒否、名前変更とview/索引、DEFAULT、metadata lock待ち、型/日時の製品差と外部キーを検査しました。本番schema/データ/設定/利用側の移行はしていません。既存のvendor/依存を変更せず、Laravelのmigrate/外部オンライン変更ツール、他DB製品の旧全SQL、全型/照合順序/依存/巨大負荷・無停止や完全復旧を実行保証するものではありません。新図は900/360px静止画で確認し、Work設定でブラウザ無効のため実ブラウザ/実端末は未検証です。
テーブル関連の親ページから子ページを選択できます。テーブル作成、カラム定義変更、カラム名変更、追加/削除、外部キー、製品配下のSQL、MySQL/MariaDBも参照します。
一次資料:MySQL ALTERの属性と依存、MariaDB ALTER、MySQL LIKE、MySQL SELECTでの作成、Online DDLとmetadata lock、操作別のOnline DDL、MySQLの格納容量、MariaDB TIMESTAMPの版別範囲、MariaDB JSON、SQL Serverの列名変更、PostgreSQL ALTER、Laravel13の列変更、Laravel10.x公式文書の旧DB条件、pt-online-schema-changeの動作とdry-run、gh-ostの要件/制約。
- 基本構文
- データベース関連
- テーブル関連
- ユーザー関連
- メタデータ関連
- 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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09