2026/5/28 2:00:37

SQL句の分類

職場のプロダクトの運用で、DBに対しては、AWSのEC2コンソールから直接SQLクエリを流してやる必要があって、色々と苦戦した。AWSの画面情報量多すぎて初心者にはかなりきつい。

AWSは早めに理解していきたい。9月にAWS JumpStartという初学者イベントに参加する予定で、ハンズオン形式のイベントらしいのだが、このイベントでエンジニア半年にも関わらず初心者丸出しになるという失態は避けたいし、会社の名前に泥を塗ることになりかねないので、それなりに準備して臨まねば、、、そう言った意味では、AWSの資格試験を受験することで強制的にAWS関連の知識を体系的にインプットするというのは一つアリかもしれない。

それ以外で、AWS周りが苦手だなーと俺が思っているのは、おそらくLinuxコマンドとかに不慣れという部分もあると思うので、そこら辺の苦手意識も潰していきたい。

で、本題に戻る。SQLはStructuerd Query Languageの略称で、DBを操作するための言語であるが、さらに以下の三種類に分別できる。

  • DDL:Data Definition Language

    • DBの構造を定義するコマンド

    • CREATE、ALTER、DROP

  • DML:Data Manipulation Language

    • SELECT 、INSERT、UPDATE、DELETE

    • DB内のデータを操作するために使用するコマンド

  • DCL:Data Control Language

    • DBのセキュリティとアクセス権限を管理するために使用する

    • BEGIN、COMMIT、GRANT、REVOKEなど

で、この分類が存在する理由がいまいちわからなかったのでGeminiに聞いてみたらこんな回答が帰ってきた

  1. 役割ごとの権限管理を簡単にするため

  2. 影響範囲と取り返しのつかなさが異なるため

1については、DDLとDMLで権限を分けたいということがある。具体的には、アプリケーションのUserにはアプリケーションをUIとして、DMLが許可されているということができる。一方、アプリケーションの開発者は、DBスキーマ自体に対して変更を直接加えることができる存在であり、DDLが許可されていると言える。言い換えれば、エンジニアにはDDLを許可し、UserにはDMLを許可するというふうに、DBに対する権限の違いを簡単に表すことができるのがこの分類が存在する利点の1つである。

2については、DMLはトランザクションを張ることで、操作が間違った場合にもロールバックで変更前に巻き戻すことができる一方、DDLによる変更をロールバックすることは基本的にできない(PostgreSQLはDDLもロールバックできるらしい。有能)。したがって、DDLとDMLという言葉を使い分けることによって、影響範囲の違いを明確化できることは開発者にとって一つのメリットである。

以上長々書いたが、眠いので今日はここまで。SQLをまともにかけないことに最近気づきつつあるため、データ構造100本ノックでもやってみようかと思う今日この頃。

1273文字)