ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
はじめに
テーブルの列(カラム)が不要になったとき、ALTER TABLE 文の DROP COLUMN 句で削除できます。シンプルに見えますが、外部キーやインデックス、トリガーから参照されていたり、巨大なテーブルだとロック・ダウンタイムの問題が出たりするため、実運用では注意点が多くあります。
基本構文
ALTER TABLE 表名 DROP COLUMN 列名;
基本例
-- employees テーブルから middle_name 列を削除
ALTER TABLE employees DROP COLUMN middle_name;
DBMS 別の差
| DBMS | 構文 | 備考 |
|---|---|---|
| Oracle | ALTER TABLE 表 DROP COLUMN 列; | DROP (col1, col2) で複数列。SET UNUSED で論理削除も可能 |
| MySQL / MariaDB | ALTER TABLE 表 DROP COLUMN 列; / ALTER TABLE 表 DROP 列; | COLUMN 省略可。MySQL 8 は INSTANT アルゴリズムで瞬時削除可能な場合あり |
| PostgreSQL | ALTER TABLE 表 DROP COLUMN 列 [IF EXISTS] [CASCADE]; | CASCADE で依存も一緒に削除可 |
| SQL Server | ALTER TABLE 表 DROP COLUMN 列; | 依存制約・インデックスは事前削除が必要 |
| SQLite | 3.35.0 以降で ALTER TABLE 表 DROP COLUMN 列; | 古いバージョンは「テーブル再作成」が必要 |
複数カラムを一度に削除
Oracle
ALTER TABLE employees DROP (middle_name, nickname);
MySQL / PostgreSQL
ALTER TABLE employees
DROP COLUMN middle_name,
DROP COLUMN nickname;
SQL Server
ALTER TABLE employees
DROP COLUMN middle_name, nickname;
依存オブジェクトのチェック
削除しようとした列に次のような依存があると、エラーで止まるか、CASCADE 指定が必要になります。
| 依存 | 挙動 |
|---|---|
| NOT NULL / UNIQUE / CHECK 制約 | 列削除と同時に消えることが多い |
| 主キー | 主キー全体を DROP CONSTRAINT してから列削除 |
| 外部キー(自テーブル側) | 外部キーを先に DROP CONSTRAINT |
| 外部キー(他テーブルから参照されている) | 参照側を直してから / CASCADE で一緒に削除 |
| インデックス | 列削除と一緒に消える(複合インデックスは一部のみだと挙動が変わる) |
| ビュー・マテビュー | 使用列を含むビューは無効化される |
| トリガー・関数 | 本文中で参照していた場合、実行時にエラー |
論理削除 → 物理削除のステップ
本番テーブルで列をいきなり物理削除すると、アプリ側で参照していた SQL が一斉に失敗するリスクがあります。次のステップで進めると安全です。
- アプリから書き込み停止: INSERT/UPDATE で当該列を使うコードを外す
- 読み取りも停止: SELECT * を含めて参照箇所を排除
- 論理削除フェーズ: Oracle なら
ALTER TABLE 表 SET UNUSED (列)、他 DBMS なら列にコメントを付け運用ドキュメントで「未使用」と宣言 - 本番待機期間: 1〜2 リリースサイクル放置して問題なければ次へ
- 物理削除:
ALTER TABLE 表 DROP COLUMN 列
大規模テーブルの注意
| DBMS | ヒント |
|---|---|
| MySQL 8 | 多くの DROP COLUMN は ALGORITHM=INSTANT でメタデータのみ書き換えれば瞬時に終わる |
| PostgreSQL | DROP COLUMN はメタデータのみ更新、実データは VACUUM 後に解放される |
| Oracle | SET UNUSED で即時論理削除 → 後で DROP UNUSED COLUMNS でまとめて物理削除すると影響を分散できる |
| SQL Server | DROP COLUMN 自体は速いが、ROWMODCTR などのメタデータ統計再計算に時間がかかる場合がある |
Oracle 特有: SET UNUSED
-- 論理削除(即時、内部的には未使用フラグを立てる)
ALTER TABLE employees SET UNUSED (middle_name);
-- 後でまとめて物理削除
ALTER TABLE employees DROP UNUSED COLUMNS;
長時間ロックを避けたいときに有効。SET UNUSED は瞬時で、物理削除をメンテ時間帯に回せます。
ロールバック性
列削除は多くの DBMS でトランザクション DDL の対象外か、サポートはあっても確実ではありません。バックアップを取ってから実行するのが鉄則です。
| DBMS | DDL トランザクション |
|---|---|
| PostgreSQL | 対応(BEGIN ~ ROLLBACK でやり直せる) |
| SQL Server | 対応(同上) |
| MySQL(InnoDB) | 非対応(即時コミット) |
| Oracle | 非対応(DDL 文の前後で暗黙コミット) |
よくあるトラブル
| 症状 | 原因 / 対処 |
|---|---|
| 外部キー違反で削除できない | 参照側の外部キー制約を先に DROP / または CASCADE |
| 「列が見つかりません」 | 大文字小文字 / 引用識別子の違い。IF EXISTS(PostgreSQL)で存在チェック |
| 長時間ロック | MySQL は INSTANT、Oracle は SET UNUSED + DROP UNUSED に分割 |
| アプリから 500 エラー | 削除前に SELECT * や INSERT で当該列を使っているコードを完全に排除 |
| 容量が減らない | 物理的な再構築が必要なケース。OPTIMIZE TABLE(MySQL)/VACUUM FULL(PostgreSQL)/ALTER TABLE ... MOVE(Oracle) |
関連
- 表関連 — 親カテゴリ
- 表の作成 — CREATE TABLE
- ALTER TABLE ADD COLUMN — 列追加
- ALTER TABLE MODIFY / RENAME COLUMN — 列変更
- DROP TABLE — テーブルごと削除
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?