【Oracle】自動的なコミットと暗黙的なコミットについて

徒然草2.0

Oracle DBA Bronzeの本を読んでいて、RDBMSを使っていて暗黙知としては知らなかった言葉に出会った「暗黙的なコミット」という言葉だ。

暗黙的なコミットとは「トランザクションの実行中(つまりDMLの使用中)にDDLやDCLを使用すると、明示的にトランザクションをCOMMITしなくてもCOMMITされること」を言う。

例えば、データをDELETEした後にCREATE USERを実行するとDELETEが確定されることを意味する。感覚的にはトランザクションを終えた後に、なんらかの定義を設定しているのだから、暗黙的にコミットしてもいい状態には違いない。だから、DMLの実行前に暗黙的なコミットをしているということになる。感覚的にはよく分かるのだが、そのことにきちんと名前がつけられている、ということを知らなかった。

…というのも、言い訳をしておくと、MySQLを使っているとデフォルトがオートコミット=自動コミットであり、DMLを使用する際に明示的にBIGIN;してからCOMMIT;をしない限りはCOMMITしない。また、常識的にDMLを記述した後に続いて、DDLやDCLのコマンドを記述してCOMMITしない。

さらにどうでもいいことを言うと、暗黙的なコミットは暗黙知になるゆえに意識して勉強しないと存在すら暗黙的になるよな。まさに暗黙的なコミットが暗黙的であるという、二重の意味で暗黙ではないか。また、自動的なコミット環境については、暗黙的なコミットは意識しないためOracleを使用しないとその存在にすら気がつかない。これもまた暗黙的になりがちな理由をつくりだしていないか。更に言えばDML/DDL/DCLというコマンドの種別も普段SQLを使っていて意識をしていない。学術的な分類に過ぎないということで言葉すら使わない。(たまに実務でも使っているひとがいてびっくりする)

徒然草2.0
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました