5.

SQL DROP TABLEの使い方|CASCADE・PURGE・誤削除からの復元

編集
この記事の要点
  • DROP TABLE はテーブルを定義・データごと削除する DDL 文
  • Oracle: DROP TABLE 表 [CASCADE CONSTRAINTS] [PURGE];
  • CASCADE CONSTRAINTS: 他表からの参照制約も一緒に削除
  • PURGE: ごみ箱(Recycle Bin)に入れず即時削除 — 復元不可
  • 誤って削除した場合は FLASHBACK TABLE ... TO BEFORE DROP で復元できる(PURGE していなければ)

DROP TABLE とは

DROP TABLE はテーブルの定義(メタ情報)と格納データを同時に削除する DDL 文です。データだけ消したい場合は TRUNCATEDELETE を使います。

構文

-- Oracle
DROP TABLE 表名 [CASCADE CONSTRAINTS] [PURGE];

-- MySQL
DROP TABLE [IF EXISTS] 表名 [, 表名 ...];

-- PostgreSQL
DROP TABLE [IF EXISTS] 表名 [, 表名 ...] [CASCADE | RESTRICT];

-- SQL Server
DROP TABLE [IF EXISTS] 表名;

Oracle のオプション

オプション意味
なしテーブルは Recycle Bin に移動。FLASHBACK で復元可能
CASCADE CONSTRAINTS他表からの参照整合性制約(外部キー)も削除
PURGERecycle Bin に入れずに即時削除。復元不可

-- 普通に削除(ごみ箱に入る)
DROP TABLE emp;

-- 外部キー参照ごと削除
DROP TABLE dept CASCADE CONSTRAINTS;

-- 完全削除(復元不可)
DROP TABLE emp PURGE;

-- 参照と領域を同時に解放
DROP TABLE dept CASCADE CONSTRAINTS PURGE;

誤って削除したテーブルの復元(Oracle)

PURGE を付けずに DROP したテーブルは Recycle Bin に格納され、FLASHBACK で復元できます。

-- ごみ箱の中身を確認
SELECT object_name, original_name, droptime FROM RECYCLEBIN;

-- テーブルを直前の状態に復元
FLASHBACK TABLE emp TO BEFORE DROP;

-- 復元先の名前を変えたい場合
FLASHBACK TABLE emp TO BEFORE DROP RENAME TO emp_restored;

-- ごみ箱を空にする
PURGE RECYCLEBIN;

TRUNCATE / DELETE との違い

SQL定義データロールバック高速
DROP TABLE削除削除×(DDL)
TRUNCATE TABLE残る削除(領域も解放)×(DDL)
DELETE FROM ...残る削除○(DML)

注意点

  • DROP TABLE は DDL なので暗黙コミットが発生する DBMS が多い(Oracle / MySQL など)。ロールバック不可
  • 外部キーで参照されているテーブルは、参照側を削除するか CASCADE オプションが必要
  • PURGE取り返しがつかない。本番では事前バックアップを必須に
  • ビュー / シノニム / プロシージャは無効化(INVALID)になるだけで、自動削除はされない

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 表の作成
  2. カラムの追加
  3. カラムの定義変更
  4. カラムの削除
  5. 表の削除

最近更新/作成されたページ