データ定義言語DDLステートメントは、スキーマオブジェクトの定義、変更、削除に使用されます。
DDLにより、アクセス対象となるアプリケーションを変更することなく、オブジェクトの属性を変更できます。例えば、人事アプリケーションがアクセスするテーブルに列を追加することができ、そのアプリケーションを書き直す必要はありません。データベースユーザーがデータベースで作業を実行する際にも、DDLを使用してオブジェクトの構造を変更できます。
より具体的には、DDLステートメントにより、以下の操作を実行できます:
スキーマオブジェクトやその他のデータベースオブジェクトの構造を作成、変更、削除します。これにはデータベース自体やデータベースユーザーも含まれます。ほとんどのDDLステートメントは、
CREATE、ALTER、またはDROPキーワードで始まります。スキーマオブジェクト内のすべてのデータを削除しますが、これらのオブジェクトの構造は削除しません (
TRUNCATEコマンド)。監査オプションを有効または無効にします (キーワード
AUDITおよびNOAUDIT)。データベースオブジェクトにコメントを追加します。
データベースは、DDLステートメントを実行する前に暗黙的なコミットを行います。DDLステートメントの実行後、即座にコミットまたはロールバックの動作が実行されます。
以下の例では、DDLステートメントを使用して customer テーブルを作成し、DMLステートメントを使用してテーブルに2行挿入します。次に、DDLステートメントを使用してテーブル構造を変更し、DCLステートメントを使用してユーザーにこのテーブルの読み取り権限を付与および取り消し、最後にそのテーブルを削除します。
CREATE TABLE customer(cust_id INT PRIMARY KEY,common_name VARCHAR(15));
# DML ステートメント
INSERT INTO customer VALUES (1,'Tom');
INSERT INTO customer VALUES (2,'Mary');
# DDL ステートメント
ALTER TABLE customer ADD ( cust_name VARCHAR(40) );
# DCL ステートメント
GRANT SELECT ON customer to User2;
REVOKE SELECT ON customer from Users;
# DDL ステートメント
DROP TABLE customer;
上記の例では、2つの挿入ステートメントの後に ALTER TABLE ステートメントが続いているため、データベースは2つの挿入操作をコミットします。ALTER TABLE ステートメントが正常に実行された場合、データベースはこのDDLステートメントをコミットします。失敗した場合は、データベースはこのDDLステートメントをロールバックします。いずれの場合も、挿入操作自体は既にコミットされています。