データベースを操作するSQLには、大きく分けて「DDL」と「DML」という2種類の命令グループが存在します。どちらもデータベースを扱うエンジニアにとって欠かせない知識ですが、その役割はまったく異なります。
「CREATE文やDROP文はどちらに分類されるの?」「INSERTやUPDATEとの違いは?」といった疑問を持つ方も多いでしょう。本記事では、DDLとDMLの違いを基礎からわかりやすく解説し、それぞれのSQL文の種類と使い分けもあわせて説明していきます。
DDLとDMLの違いは「構造を操作するか・データを操作するか」
それではまず、DDLとDMLの本質的な違いについて解説していきます。
DDLとDMLは、どちらもSQLに含まれる命令の分類ですが、操作対象がまったく異なります。DDLはデータベースの「構造」を操作するSQLであり、DMLはデータベースの「中身(データ)」を操作するSQLです。
この違いを理解することで、どのSQL文をどのような場面で使うべきかが明確になります。
DDL(Data Definition Language):テーブルやスキーマなどの「構造定義」を扱う言語。CREATE・DROP・ALTER・TRUNCATEなどが該当。
DML(Data Manipulation Language):テーブル内の「データ」を扱う言語。SELECT・INSERT・UPDATE・DELETEなどが該当。
DDL(データ定義言語)とは何か
DDLとは「Data Definition Language」の略で、日本語ではデータ定義言語と呼ばれます。データベースの構造そのものを定義・変更・削除するための命令群です。
たとえば、新しいテーブルを作成したり、既存のテーブルを削除したりする操作がDDLにあたります。テーブルの「骨格」を設計する作業と捉えるとイメージしやすいでしょう。
DDL文を実行すると、多くのデータベースでは自動的にコミット(変更確定)が行われるという特徴もあります。
DML(データ操作言語)とは何か
DMLとは「Data Manipulation Language」の略で、日本語ではデータ操作言語と呼ばれます。テーブルの中に存在するデータそのものを検索・追加・更新・削除するための命令群です。
「アボカドの在庫数を更新したい」「ゴリラという名前のユーザーを追加したい」といった、日々の業務でよく発生するデータ操作に使われます。
DMLはトランザクション制御(COMMITやROLLBACK)と組み合わせて使えるため、操作ミスを取り消せるという利点があります。
DDLとDMLを比較した一覧表
DDLとDMLの違いを視覚的に整理してみましょう。
| 項目 | DDL | DML |
|---|---|---|
| 正式名称 | Data Definition Language | Data Manipulation Language |
| 操作対象 | テーブル・スキーマなどの構造 | テーブル内のデータ |
| 主なSQL文 | CREATE、DROP、ALTER、TRUNCATE | SELECT、INSERT、UPDATE、DELETE |
| 自動コミット | あり(多くのDBで) | なし(明示的なCOMMITが必要) |
| ロールバック | 基本的に不可 | 可能 |
この表を参考にすると、DDLは「設計・構築フェーズ」、DMLは「運用・データ管理フェーズ」でよく使われることがわかります。
DDLの主なSQL文と使い方
続いては、DDLに含まれる主なSQL文の種類と使い方を確認していきます。
DDLには、テーブルの作成・削除・変更など、データベースの構造を操作するためのSQL文が揃っています。それぞれの役割をしっかり把握しておきましょう。
CREATE文:テーブルや構造を新規作成する
CREATE文は、新しいテーブルやデータベースを作成するためのDDL文です。テーブルの列名・データ型・制約などを定義して実行します。
以下は、商品テーブルを作成するサンプルコードです。
-- 商品テーブルの作成
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price INT NOT NULL,
stock INT DEFAULT 0
);
# 出力結果:テーブル「products」が正常に作成される
CREATE文ではテーブルだけでなく、データベース自体(CREATE DATABASE)やビュー(CREATE VIEW)なども作成できます。
DROP文:テーブルや構造を削除する
DROP文は、テーブルやデータベース全体を削除するDDL文です。テーブルの構造ごとすべてのデータが削除されるため、実行には十分な注意が必要です。
-- 商品テーブルを削除する
DROP TABLE products;
# 出力結果:テーブル「products」とその全データが削除される
DROP文はロールバックできないケースがほとんどです。誤って実行してしまうとデータの復元が困難になるため、本番環境での使用には細心の注意を払いましょう。
ALTER文・TRUNCATE文の役割
ALTER文は、既存のテーブルの構造を変更するDDL文です。列の追加・削除・データ型変更などに使います。
-- 商品テーブルに「category」列を追加する
ALTER TABLE products ADD COLUMN category VARCHAR(50);
# 出力結果:「category」列がproductsテーブルに追加される
一方、TRUNCATE文はテーブルの構造は残しつつ、全データを一括削除するDDL文です。DELETE文と似ていますが、TRUNCATEはDDLに分類され、高速に動作するという違いがあります。
-- 商品テーブルの全データを削除(構造は保持)
TRUNCATE TABLE products;
# 出力結果:productsテーブルのデータがすべて削除される(テーブルは残る)
DMLの主なSQL文と使い方
続いては、DMLに含まれる主なSQL文について確認していきます。
DMLはデータの日常的な操作に使われるSQL文の集まりです。SELECT・INSERT・UPDATE・DELETEの4つが代表的で、データベースを利用するアプリケーション開発では欠かせない存在です。
INSERT文:データを新規追加する
INSERT文は、テーブルに新しいレコードを追加するDML文です。列名と値を対応させて記述します。
-- 商品テーブルにアボカドのデータを挿入する
INSERT INTO products (product_id, product_name, price, stock)
VALUES (1, 'アボカド', 200, 50);
# 出力結果:product_id=1、product_name='アボカド'のレコードが追加される
複数のレコードを一度に追加したい場合は、VALUESに複数の値セットをカンマ区切りで記述することも可能です。
UPDATE文:既存データを更新する
UPDATE文は、テーブル内の既存レコードを更新するDML文です。WHERE句で対象を絞り込まないと全レコードが更新されてしまうため、必ずWHERE句を指定する習慣をつけましょう。
-- アボカドの価格を250円に更新する
UPDATE products
SET price = 250
WHERE product_name = 'アボカド';
# 出力結果:product_name='アボカド'のpriceが250に更新される
SELECT文・DELETE文の使い方
SELECT文はデータを検索・取得するDML文で、最も頻繁に使われるSQL文のひとつです。
-- 在庫が30以上の商品を取得する
SELECT product_id, product_name, stock
FROM products
WHERE stock >= 30;
# 出力結果:stock>=30の商品レコードが一覧表示される
DELETE文は、テーブルから特定のレコードを削除するDML文です。TRUNCATEと異なりWHERE句で削除対象を絞れるため、部分的な削除が可能です。
-- ドラゴンフルーツのレコードを削除する
DELETE FROM products
WHERE product_name = 'ドラゴンフルーツ';
# 出力結果:product_name='ドラゴンフルーツ'のレコードが削除される
DDL・DML以外のSQL分類も知っておこう
続いては、DDLとDML以外にも存在するSQLの分類についても確認していきます。
SQLの命令はDDL・DMLだけでなく、他にもいくつかの分類が存在します。データベース操作の全体像を把握するために、あわせて理解しておくと役立ちます。
DCL(データ制御言語)とは
DCLとは「Data Control Language」の略で、データベースへのアクセス権限を制御するSQL文の分類です。
GRANTは権限を付与、REVOKEは権限を剥奪するためのSQL文です。複数のユーザーが利用するデータベースのセキュリティ管理に活用されます。
| SQL文 | 役割 | 分類 |
|---|---|---|
| GRANT | アクセス権限の付与 | DCL |
| REVOKE | アクセス権限の剥奪 | DCL |
| COMMIT | トランザクションの確定 | TCL |
| ROLLBACK | トランザクションの取り消し | TCL |
TCL(トランザクション制御言語)とは
TCLとは「Transaction Control Language」の略で、トランザクションの開始・確定・取り消しを制御するSQL文の分類です。
COMMITで変更を確定し、ROLLBACKで変更を取り消すことができます。DMLと組み合わせて使うことで、データの整合性を保てます。
DMLによるデータ変更はCOMMITするまで確定しないため、ミスに気づいた時点でROLLBACKすれば元の状態に戻せます。DDLには自動コミットが適用されるDBが多いため、この「取り消せる」特性はDMLの大きな強みです。
SQLの全体的な分類まとめ
SQLの命令分類を整理すると、以下のようになります。
| 分類 | 正式名称 | 主なSQL文 | 目的 |
|---|---|---|---|
| DDL | データ定義言語 | CREATE, DROP, ALTER, TRUNCATE | 構造の定義・変更・削除 |
| DML | データ操作言語 | SELECT, INSERT, UPDATE, DELETE | データの検索・追加・更新・削除 |
| DCL | データ制御言語 | GRANT, REVOKE | アクセス権限の管理 |
| TCL | トランザクション制御言語 | COMMIT, ROLLBACK, SAVEPOINT | トランザクションの制御 |
データベース操作を体系的に学ぶ際は、この4分類を軸に整理するとスムーズに理解が進むでしょう。
まとめ
本記事では、DDLとDMLの違いについて、意味・主なSQL文・使い分けの観点から解説しました。
DDLはテーブルなどの「構造」を操作し、CREATE・DROP・ALTER・TRUNCATEが代表的なSQL文です。一方、DMLはテーブル内の「データ」を操作し、SELECT・INSERT・UPDATE・DELETEが中心となります。
また、権限管理を担うDCLやトランザクション制御を行うTCLも含め、SQLの全体像を把握することが、より確かなデータベース操作スキルにつながります。
それぞれの役割の違いをしっかり理解して、場面に応じたSQL文を使いこなしていきましょう。