DDL, DML, DCLとは?SQLのコマンド体系を理解する
SQLを学習していると、「DDL」「DML」「DCL」といった言葉を耳にすることがあるかと思います。
これらはSQLのコマンドを機能ごとに分類したものです。
「CREATE TABLE」や「SELECT」といった個別のコマンドは知っていても、それらがどのグループに属するのか、なぜ分類されているのかを意識したことはないかもしれません。
「結局、何が違うの?」
そう思われた方もいるでしょう。
本記事では、このSQLのコマンド体系について、それぞれの特徴と違いを、具体的なSQLコードを交えながら解説していきます。
データベースを操作する上で、これらの違いを理解することは、より安全で効率的なデータ管理の第一歩となります。
まずは、それぞれのグループがどのような役割を担っているのかを見ていきましょう。
データベースの構造を定義する:DDL (Data Definition Language)
DDLは「Data Definition Language」の略で、日本語では「データ定義言語」と呼ばれます。
その名の通り、データベースの構造、つまりテーブルやインデックス、ビューなどのオブジェクトを「定義」したり、「変更」したり、「削除」したりするためのコマンド群です。
データベースの設計図を作成するようなイメージです。
DDLコマンドを実行すると、データベースのスキーマ(構造)が変更されます。
例えば、新しいテーブルを作成する際に、どのような列(カラム)を持ち、それぞれの列がどのようなデータ型(数値、文字列、日付など)を持つのかを定義します。
また、既存のテーブルに新しい列を追加したり、不要になったテーブルを削除したりする際にもDDLが使われます。
DDLの代表的なコマンドとしては、以下のようなものがあります。
- CREATE: 新しいデータベースオブジェクト(テーブル、インデックス、ビューなど)を作成します。
- ALTER: 既存のデータベースオブジェクトの構造を変更します。
- DROP: データベースオブジェクトを削除します。
- TRUNCATE: テーブルの全データを高速に削除します(テーブル構造は残ります)。
実際に、新しいテーブルを作成する例を見てみましょう。
CREATE TABLE users (
user_id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
このSQL文は、「users」という名前のテーブルを作成しています。
user_id、username、email、created_at という4つの列が定義されており、それぞれのデータ型や制約(PRIMARY KEY、NOT NULL、UNIQUEなど)も指定されています。
このように、DDLはデータベースの骨格を作るための非常に重要な役割を担っています。
DDLコマンドは、実行すると即座にデータベースの構造に反映されるため、慎重な操作が求められます。
次に、データベースに格納されたデータを操作する言語について見ていきましょう。
データベースのデータを操作する:DML (Data Manipulation Language)
DMLは「Data Manipulation Language」の略で、日本語では「データ操作言語」と呼ばれます。
DDLがデータベースの「構造」を定義するのに対し、DMLはデータベースに格納されている「データ」そのものを操作するためのコマンド群です。
具体的には、データの追加、検索、更新、削除といった、日常的に最もよく利用する操作が含まれます。
皆さんがSQL学習で最初に取り組むことが多い「SELECT」文も、このDMLに分類されます。
DMLの代表的なコマンドは以下の通りです。
- SELECT: データベースからデータを検索・取得します。
- INSERT: 新しいデータをデータベースに追加します。
- UPDATE: 既存のデータを更新します。
- DELETE: データベースからデータを削除します。
先ほどDDLで作成した users テーブルにデータを追加してみましょう。
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('Bob', 'bob@example.com');
これらのコマンドで、users テーブルに2人のユーザー情報が追加されました。
次に、追加したデータを検索してみます。
SELECT username, email FROM users WHERE user_id = 1;
このクエリは、user_id が 1 のユーザーの username と email を取得します。
実行結果は以下のようになると予想されます。
username | email
---------|------------------
Alice | alice@example.com
さらに、既存のデータを更新したり、削除したりすることもDMLで行います。
UPDATE users SET email = 'alice.smith@example.com' WHERE username = 'Alice';
DELETE FROM users WHERE username = 'Bob';
このように、DMLはデータベース内のデータを実際に操作するためのコマンド群です。
データベースへのデータ投入や、そこからの情報抽出など、アプリケーションがデータベースとやり取りする際の中心的な役割を担います。
DDLで作成した構造の中に、DMLでデータを格納し、必要に応じて操作していく、という流れになります。
さて、データベースの構造を定義し、その中にデータを格納・操作する、というところまで見てきました。
しかし、データベースは複数のユーザーが同時にアクセスしたり、機密性の高い情報を扱ったりすることもあります。
そこで必要になるのが、アクセス権限などを管理するコマンド群です。
データベースへのアクセスを制御する:DCL (Data Control Language)
DCLは「Data Control Language」の略で、日本語では「データ制御言語」と呼ばれます。
DCLの主な役割は、データベースへのアクセス権限を管理することです。
誰がどのデータに、どのような操作(参照、更新、削除など)を許可されているのか、あるいは禁止されているのかを定義します。
これにより、データベースのセキュリティを確保し、不正なアクセスや意図しないデータ変更を防ぎます。
DCLの代表的なコマンドには、以下のようなものがあります。
- GRANT: ユーザーに特定の権限を付与します。
- REVOKE: ユーザーから付与された権限を取り消します。
例えば、特定のユーザー app_user に users テーブルへの参照権限 (SELECT) と挿入権限 (INSERT) を与える場合、以下のようなコマンドを使用します。
GRANT SELECT, INSERT ON users TO app_user;
逆に、その権限を取り消したい場合は REVOKE を使います。
REVOKE INSERT ON users FROM app_user;
これらのコマンドは、データベース管理者(DBA)が主に利用するものです。
アプリケーション開発者や一般ユーザーが直接これらのコマンドを実行する機会は少ないかもしれませんが、データベースの安全な運用には不可欠な要素です。
DDL, DML, DCL の違いまとめ
ここまで、DDL、DML、DCLのそれぞれの役割と代表的なコマンドを見てきました。
改めて、それぞれの違いを整理しておきましょう。
- DDL (Data Definition Language): データベースの構造(テーブル、インデックスなど)を定義、変更、削除します。
- 例:
CREATE TABLE,ALTER TABLE,DROP TABLE,TRUNCATE TABLE
- 例:
- DML (Data Manipulation Language): データベース内のデータ(レコード)を操作(検索、追加、更新、削除)します。
- 例:
SELECT,INSERT,UPDATE,DELETE
- 例:
- DCL (Data Control Language): データベースへのアクセス権限を管理します。
- 例:
GRANT,REVOKE
- 例:
これらの分類を理解することで、SQLコマンドの役割がより明確になり、データベースの全体像を把握しやすくなります。
例えば、「テーブルを作成する」という操作はDDL、「テーブルからデータを取得する」という操作はDML、「特定のユーザーにテーブルへのアクセスを許可する」という操作はDCL、というように、それぞれのコマンドがどのカテゴリに属するかを意識できるようになります。
この理解は、データベース設計や管理において、より安全で効率的な操作を行うための基礎となります。
SQL Questでは、これらの基本的なコマンドから応用的なテクニックまで、実践的な練習問題を通して学ぶことができます。
今回学んだDDL、DML、DCLの知識を活かして、ぜひ関連する練習問題に挑戦してみてください。