目的から項目を選ぶ
Oracle 19cの表・索引DDLを目的別に選ぶための案内です。以下から詳細ページを選んでください。各ページの製品・版・前提条件も確認し、そのまま本番へ一括実行する手順とは扱わないでください。
- 表の作成:新しい表を作る
- カラムの追加:列を追加する
- カラムの定義変更:既存列の定義を変更する
- カラムの削除:列を削除する
- 表の削除:表そのものを削除する
- TRUNCATE文:表を残して全行を削除する(製品別の比較)
親カテゴリ:DDL。DDLや採番を消費するSELECTは読取だけの確認ではありません。以下は独立した教材例であり、実DBでの実行・性能・復旧成功を保証しません。
| この記事の要点 |
|
表関連 DDL とは
Oracle の表(テーブル)に対する DDLは、テーブル構造の作成・変更・削除を行う SQL 文の総称です。データを操作する DML(SELECT / INSERT / UPDATE / DELETE)と異なり、スキーマ自体を変えるのが特徴です。
| 文 | 目的 |
|---|---|
| CREATE TABLE | 新しい表を作成 |
| ALTER TABLE | 列定義の追加・変更・削除、制約の追加・削除、表名や列名の変更 |
| DROP TABLE | 表の定義・データを削除(復旧可否は別途条件付き) |
| TRUNCATE TABLE | 表の構造は残して全行を削除(速度は依存・ロック待機・負荷次第) |
| RENAME | 表名を変更 |
| COMMENT | 表や列にコメントを付ける(DBA 向けメモ) |
CREATE TABLE
新しい表を作成します。列定義と制約を一括で書きます。
Oracle 19cの独立した作成例です。departments(dept_id)の参照可能な主キー/一意制約が必要です。同名表がある状態や他の例と連続して実行しないでください。
CREATE TABLE employees (
emp_id NUMBER(10) PRIMARY KEY,
name VARCHAR2(100) NOT NULL,
email VARCHAR2(255) UNIQUE,
dept_id NUMBER(10) REFERENCES departments(dept_id),
salary NUMBER(10,2) CHECK (salary >= 0),
hired_at DATE DEFAULT SYSDATE,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
主な制約と列の既定値をまとめます。NOT NULL・PRIMARY KEY・UNIQUE・FOREIGN KEY・CHECKは整合性の制約です。DEFAULTはOracleの制約ではなく、値を省略した場合等に使う列の既定値指定です。
| 制約・既定値 | 意味 |
|---|---|
| NOT NULL | NULL を禁止 |
| PRIMARY KEY | 主キー(NOT NULL + UNIQUE) |
| UNIQUE | 重複禁止 |
| FOREIGN KEY / REFERENCES | 他表の列を参照(外部キー) |
| CHECK | 列値が条件を満たすか検査 |
| DEFAULT | 列の既定値指定(制約ではない)。INSERTで値を省略した場合等に使う。通常のDEFAULTは明示NULLを置換せず、DEFAULT ON NULLとは区別する |
ALTER TABLE
列の追加
Oracle 19cの列追加例です。既存の列名・既定値・利用側を確認し、検証用の表で個別に評価してください。
ALTER TABLE employees ADD (
phone VARCHAR2(20),
is_active NUMBER(1) DEFAULT 1
);
列定義の変更
Oracle 19cの定義変更例です。phoneの既存NULLや全属性、利用側を照合してください。NOT NULL追加の成功を保証する例ではありません。
-- 桁数を広げる、NULL 許可を変える
ALTER TABLE employees MODIFY (
email VARCHAR2(320),
phone VARCHAR2(20) NOT NULL
);
列の削除
Oracle 19cの列削除例です。phoneの値は失われ、通常のROLLBACKや同名列の再追加では復元できません。
ALTER TABLE employees DROP COLUMN phone;
列名 / 表名の変更
Oracle 19cの名前変更例です。参照するSQL・アプリへの互換を保証しません。他の例の表名とは独立して読んでください。
ALTER TABLE employees RENAME COLUMN name TO full_name;
ALTER TABLE employees RENAME TO staff;
-- 単独構文の RENAME も使える
RENAME staff TO employees;
制約の追加・削除
Oracle 19cの制約追加/削除例です。既存データの適合と同名制約の有無を確認してください。既存制約の解除をエラーの自動対処にしないでください。
ALTER TABLE employees
ADD CONSTRAINT chk_salary CHECK (salary >= 0);
ALTER TABLE employees
DROP CONSTRAINT chk_salary;
DROP TABLE
表の定義・データと索引等を削除します。Oracle 19cでは対象表と設定がrecycle binの条件を満たし、対象がまだ残る場合に限り、FLASHBACK TABLE ... TO BEFORE DROPを検討できます。DROPしたことと復旧できることは別です。PURGE付きはFlashback Dropできず、バックアップ等の復旧可否まで一律には断定できません。
保存したOracle 19cのDROP比較例です。「ごみ箱に入る」は対象・設定・領域条件付きです。PURGEはFlashback Drop不可、CASCADE CONSTRAINTSは参照制約を削除します。3文を連続実行しないでください。
DROP TABLE employees; -- ごみ箱に入る
DROP TABLE employees PURGE; -- 永久削除(戻せない)
DROP TABLE employees CASCADE CONSTRAINTS; -- 参照制約も道連れで削除
TRUNCATE TABLE
表は残して全行を削除します。行単位のDELETEより効率的な場合がありますが、依存関係・ロック待機・負荷によって実行時間は変わり、高速とは限りません。Oracle 19cの通常表ではDELETEと次の違いがあります。
| 項目 | DELETE | TRUNCATE |
|---|---|---|
| 区分 | DML | DDL |
| トランザクション | ロールバック可 | Oracle通常表は暗黙COMMIT、ROLLBACK不可。private temporary tableの既存transactionへのCOMMIT例外は別 |
| 速度 | 対象行数・アクセスパス・索引保守・トリガ・ロック待機等に依存し、単純比例とは限らない | HWMリセット等で有利な場合があるが、依存・ロック待機・負荷次第 |
| WHERE | 使える | 使えない(全消し) |
| トリガ起動 | 定義に応じDELETEのDMLトリガ | DELETEの行DMLトリガは発火しない。SCHEMA/DATABASEのTRUNCATE DDLトリガは別 |
| 領域返却 | されない(再利用される) | される(オプションで保持も可) |
Oracle 19cの通常表を空にする代替例です。DELETEの行DMLトリガは発火せず、DDLトリガとは別です。TRUNCATEは通常のROLLBACKで戻せません。2文の連続実行を勧めません。
TRUNCATE TABLE employees; -- 領域を返却
TRUNCATE TABLE employees REUSE STORAGE; -- 領域は確保したまま
採番も別に確認します。Oracleの独立したSEQUENCEは表と独立したオブジェクトであり、表のTRUNCATEによるリセット対象とは扱いません。GENERATED AS IDENTITYのTRUNCATE後の値はこの説明では未確認であり、独立SEQUENCEから継続/リセットを類推しません。
DDL とトランザクション
Oracle 19cの通常のDDLでは、構文上正しいDDLの実行前と、成功したDDLの実行後に暗黙COMMITがあります。先行する未確定INSERTも確定するため、DDLが失敗すれば先行DMLも戻るとは保証できません。ただしprivate temporary tableのTRUNCATEは既存transactionをCOMMITしない例外です。これは通常表TRUNCATEの取消可能性を意味しません。本番運用では次を確認します。
- DDLの前に対象transactionと未確定変更を確認し、業務上その変更を確定するか取消すかを判断して、必要な
COMMITまたはROLLBACKを行う。DDLを通すための無闇なCOMMITはしない - 本番への DDL は検証環境で構文を確認してから流す
- 通常のROLLBACKで戻せない
DROP/TRUNCATEの前に、必要なデータ・定義・依存の退避と復元手順を確認する。エクスポートの取得だけでは復元を保証しない。対象範囲・整合性・権限と、隔離環境での復元確認まで含めて判断する
FLASHBACK でうっかり削除を復旧
Oracle 19cのFlashback Dropは、対応する表がrecycle binに残っており、対象・権限・名前等の条件を満たす場合の復旧です。直後でも成功を保証しません。PURGE済みや表領域ごと削除された対象はこの方法では戻せません。TRUNCATEした行の復旧手段とも異なります。
保存したOracleの復旧構文比較です。TO BEFORE DROPはrecycle binに対象が残る等の条件付きです。末尾のPURGE RECYCLEBINは読取ではなく復旧候補を消す操作なので実行しないでください。
-- ごみ箱の中身を確認
SELECT object_name, original_name, droptime FROM user_recyclebin;
-- 復元
FLASHBACK TABLE employees TO BEFORE DROP;
-- 名前を変えて復元(同名表が既に存在する場合)
FLASHBACK TABLE employees TO BEFORE DROP RENAME TO employees_old;
-- ごみ箱を空にする
PURGE RECYCLEBIN;
関連
公式資料と確認範囲
Oracle Database 19c、MySQL 8.4、PostgreSQL 18とMicrosoft SQL Serverの一次資料で構文と条件を照合しています。導入版の根拠はPostgreSQL 12のリリースノートです。SQLや実ブラウザでの検証結果ではなく、他版・エディションや省略された検体の成功を保証しません。
- Oracle 19c COMMIT:DDL前後の確定。
- Oracle 19c TRUNCATE TABLE:通常表とprivate temporary table。
- Oracle 19c CREATE TRIGGER:DML/DDLイベントの区別。
- Oracle 19c DROP TABLE、FLASHBACK TABLE:削除と条件付き復旧。
- Oracle 19c CREATE SEQUENCE:表と独立した採番。
- Oracle 19c constraint、CREATE INDEX:主キー・索引の区別。
- PostgreSQL 18 Constraints、MySQL 8.4 FOREIGN KEY、MySQL 8.4 非標準キーの制限:参照可能なキーと互換条件。
- PostgreSQL 12 Release Notes、PostgreSQL 18 REINDEX:CONCURRENTLYの導入版と待機・制限。
- MySQL 8.4 Range Optimization:Skip Scanの条件。
- MySQL 8.4 Online DDL Limitations、CREATE INDEX:ロックと製品固有構文。
補足の根拠:Oracle 19c CREATE TABLEのDEFAULT、索引・関数索引とBITMAPのロック、ALTER INDEXのTABLESPACE省略、ANALYZE、統計収集、costによるアクセスパス選択、MySQL 8.4の型変換、PostgreSQL 18の部分索引、SQL Server UNIQUEとNULL、SQL Server DROP INDEXの対象指定。
人気ページ
- 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