COMMIT クエリ
COMMIT クエリはトランザクション操作を制御するためのコマンドで、入力や更新、削除されたデータの保存を確定します。
COMMIT クエリは任意に実行することもできますが、通常は自動で実行されます。どのようなタイミングで実行されるかはデータベースによります。
マルチユーザーの環境ではデータの変更は COMMIT が実行されない限りは反映されません。すべてのユーザーにデータの変更が反映されには COMMIT が自動で実行されるのを待つ必要があります。
任意に COMMIT を実行する方法もありますが、ほとんどのデータベースでは COMMIT は自動でオンの状態になっており、そのままでは COMMIT をリクエストできません。
任意に COMMIT を実行するには、START TRANSACTION または BEGIN の宣言を使用します。
START TRANSACTION または BEGIN はファンクションやプロシージャで使用することができ、ファンクションやプロシージャ内で COMMIT を実行するようにできます。
データの入力や更新のファンクションで COMMIT を実行するようにすれば即時にそのことが反映されます。ただし、変更した内容は記録され元には戻せません。
COMMIT に関連したクエリに ROLLBACK があります。 ROLLBACK は入力や更新されたデータを保存しないようにするようにできます。
ページ内 Index
COMMIT とは
COMMIT とはトランザクション操作を制御するためのコマンドで、入力や更新、削除されたデータの即時に保存します。
トランザくジョン処理において変更されたデータが保存( COMMIT )されるまではデータを変更したユーザーの操作が終わるまで待ちになります。
マルチユーザー環境では COMMIT が実行されるまですべてのユーザーがデータの変更があったことを知ることができません。そのためにマルチユーザー環境では重複した同じデータを変更を行う可能性があります。
COMMIT はマルチユーザー環境で重複したデータ変更が起こらないようすることができます。
データベースにおけるトランザクションとは、クエリのリクエスト〜データ保存までの一連の処理のことをいいます。
例えば INSERT、UPDATE、DELETE クエリのリクエストは以下のようなトランザクション処理が行われます。
COMMIT または ROLLBACK は変更されたデータの保存を確定するか/キャンセルするかのクエリです。
COMMIT はデータの保存をただちに行い変更内容がすぐに反映されます。ROLLBACK は保存をキャンセルすることでデータの変更は反映されません。
データベースの多くが自動で COMMIT が実行されます。ただし、ユーザーの操作が終わるまで変更されたデータの保存は待ちになります。
スタンドアロン環境ではデータの変更は即時に反映されるために分かり難いです。
自動 COMMIT がオンの状態で COMMIT を任意に機能させるには、START TRANSACTION または BEGIN を宣言します。
自動 COMMIT がオンであるかは、 MySQL では autocommit プロパティ を、PostgreSQL では AUTOCOMMIT プロパティで確認できます。
自動 COMMIT の設定
自動 COMMIT は一時的にオフにすることができます。オン/オフの方法はデータベースによって違いがあります。
MySQL
自動 COMMIT をオフにするには、MySQL では autocommit の設定を 0 にします。
自動 COMMIT をオンにするには、autocommit の設定を 1 に設定します。
PostgreSQL
PostgreSQL において自動 COMMIT をオフにするには、AUTOCOMMIT の設定を off にします。
自動 COMMIT をオンにするには、autocommit の設定を on に設定します。
自動 COMMIT がオンの状態で任意に COMMIT を機能させるには、START TRANSACTION または BEGIN を宣言します。
START TRANSACTION
START TRANSACTION は一連のトランザクション処理として始めることを宣言します。このコマンドは BEGIN と同じです。
処理の途中でSET autocommit=0;
または\set AUTOCOMMIT off
を実行することで自動 COMMIT を一時的に停止することができます。
自動 COMMIT がオフの状態なら COMMIT を任意に使用することができます。ただし、データの変更内容をキャンセルするためには ROLLBACK を実行します。
最終的には COMMIT によって元通りのデータの状態で保存しています。
COMMIT の効果に関してはこのようなスタンドアロンの環境では分かり難いのですが、マルチユーザーで1つのデータベースを利用している場合では COMMIT されない限りはすべてのユーザーにデータの変更は反映されません。