これまで、データベースに対して1人のユーザーとして操作をしてきましたが、データベースは、複数のユーザーから同時にアクセスされる可能性があります。
1回のデータベースへの働きかけを、セッションといいます。
つまり、データベースは複数のセッションから常にアクセスされることを想定しておかなければなりません。
銀行の入出金のようなシステムでは、あるセッションの口座に対しての処理は、他のセッションに邪魔されずに一貫して行わなければなりません。
このような入出金の一連の処理をRDBMSでは、トランザクションとして管理します。
トランザクションとは、データベースを更新するとき、途中で区切ることのできない処理のまとまりの事です。
すべての処理が成功した場合にのみ、確定することをコミットといいます。
また、処理が一部でも失敗した場合は、すべての処理が取り消されます。
これを、ロールバックといいます。
トランザクションの開始
トランザクションを開始するにはSTART TRANSACTION(BEGINやBEGIN WORKと指定しても良い)を使います。
【書式】トランザクションの開始
START TRANSACTION;
【書式】コミット
COMMIT;
【書式】ロールバック
ROLLBACK;
【ヒント】トランザクションでロールバックできない処理
トランザクションによって、何でもロールバックで元に戻せるわけではありません。
次のコマンドは、自動的にコミットされてしまいます。
DROP DATABASE
DROP TABLE
ALTER TABLE
自動コミット機能
MySQLでコマンドを実行すると、通常そのまま確定されます。
ユーザーが意識しなくても、すべてのコマンドが自動的にCOMMITされているのです。
このように、自動的にコミットする機能を自動コミット機能といいます。
デフォルトでは、自動コミット機能がオンの状態になっています。
自動コミット機能は、ユーザーが強制的にオフの状態にすることもできます。
自動コミット機能がオフの状態では、SQL文を実行しただけではコミットされず、COMMITもしくはROLLBACKコマンドを実行することで、データベースの状態が確定されます。
【書式】自動コミット機能をオフにする
SET AUTOCOMMIT = 0;
【書式】自動コミット機能をオンにする
SET AUTOCOMMIT = 1;
【書式】現在の自動コミットの状況を確認する
SELECT @@AUTOCOMMIT;
自動コミット機能がオンなら1、オフなら0が表示されます。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】