DDL (データ定義言語) は、データベースの構造を定義するために設計された言語であり(テーブル、スキーマ、インデックスの作成、変更、削除など)、以下に例を示します:
CREATE TABLE, ALTER TABLE, DROP TABLE。DML (データ操作言語) は、テーブルのコンテンツを操作するための言語であり(行の追加、変更、削除、選択など)、以下に例を示します:
INSERT, UPDATE, DELETE, SELECT。例えば、異なるユーザーがDMLまたはDDLのみに異なる権限を持つことができます:
-- DDL: テーブルの作成 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML: データの挿入 INSERT INTO users (id, name) VALUES (1, 'Ivan');
「DDLコマンド(例えば、DROP TABLE)が明示的なトランザクション内で実行された場合、ロールバックできますか?」
ほとんどのDBMS(例えば、PostgreSQL、Oracle)はDDLのトランザクションをサポートしていますが、明示的にトランザクションにラップされていても、DDLコマンドをロールバックすることを許可しないものも多いです。MySQLでは、DDLコマンドは常に即座にコミットされます。
BEGIN; DROP TABLE employees; ROLLBACK;
ほとんどの場合、テーブルはロールバックされても永久に削除されます。
事例
DROP TABLEを偶然に実行した結果、開発環境でテーブルを失いました — コマンドはロールバックされても元に戻せません。
事例
組織がプロジェクトに管理権限を与え、バグが原因でALTERを通じてデータベースの構造を大量に変更し、サービスが長時間停止し、注文の損失を引き起こしました。
事例
DDL権限を新人に拒否したところ、デプロイ用の移行手続きにはDDLアクセスが必要であることをチームは忘れ、非常時に役職を引き上げられた後、数時間の調査の末にリリースが失敗しました。