SQLのDML、DDL、DCLって何?

同じSQLでも種類があるみたい

1.DML(Data Manipuration Language)

データ操作言語
SELECT,INSERT,UPDATE,DELETE,MERGE等々
これらのようなSQLをDMLと呼ぶんだってさ。
データを操作する言語ってぐらいだから、なんとなくわかるような
データ自体を何かしらするのがDMLってことにしとこう

2.DDL(Data Definition Language)

データ定義言語
CREATE,ALTER,DROP,RENAME,TRUNCATE等々

データを定義する言語ってぐらいだからなんとなくわかるような?
テータの内容を直接どうとかじゃない系だね。
テーブルとかビューとか作ったり消したりデータに直接関係ない感じだね。

ただ、条件のないDELETEとTRUNCATEって動作同じじゃない?って思うよね
指定したテーブルの内容が全部消えるっていう結果は同じ。
なぜそれぞれがDMLとDDLになっているのかは、おそらく内部の処理とか考え方が全然違うからなんでしょうね。
DDLの命令はロールバックとかできないみたいだからTRUNCATEで消すとデータはもう戻ってこないらしいよ。
でもDELETEより処理が早いって。
なんだかTRUNCATE怖いね。

ついでに僕がはまったんだけど、TRUNCATEはDDLだから文の最後に「;」は不要なんだってさ。
「TRUNCATE テーブル名」だけでいいって
「DELETE FROM テーブル名;」みたいに「;」はいらない
それだけ!

3.DCL(Data Control Language)

データ制御言語
GRANT、REVOKE等々
たぶん権限を渡したりとかそういう命令だよね。
使ったことないからわからん。

データを制御する言語?まったくちんぷんかんぷんやね。
データベースをコントロール、つまり権限とかってことか。
覚えにくい。

3.トランザクション制御

なんでこれだけ日本語なんでしょう。
COMMIT,ROLLBACK,SAVEPOINT等々

これはそのままだよね。トランザクション制御する命令だしね。
ってもトランザクション自体の概念がなかなか奥が深そうだね。
ROLLBACKはあまり使わないけど、COMMITは結構使うよね。