トランザクションは、すべてが相互に依存するクエリのグループがある場合に使用されます。
例:銀行:
- 銀行の顧客「ジョン」は「アリス」の口座に100ドルを送金します。
- この例では、2つのクエリがあります(ログやトランザクション履歴は表示していません...など)。ジョンの残高から100ドルを差し引き、それをアリスの残高に追加する必要があります。
Start transaction
- ジョンから差し引く
UPDATE accounts SET balance=balance-100 WHERE account='John'
- アリスに追加
UPDATE accounts SET balance=balance+100 WHERE account='Alice'
commit
トランザクションは、コミットするまで保存されません。したがって、いずれかのクエリでエラーが発生した場合は、rollback
を呼び出すことができます。 トランザクションの開始以降に実行されたクエリをすべて元に戻します。何らかの理由でアリスに$100を追加するクエリが失敗した場合は、ロールバックしてジョンから$100を差し引くことはできません。これは、必要に応じてクエリを自動的に元に戻すことができるようにする方法です。
-
2つ以上の削除/更新/挿入クエリを実行するときにトランザクションを開始する必要がありますか?
クエリの実行内容によって異なります。
-
削除/更新/挿入クエリが1つしかない場合にも、トランザクションを開始する必要がありますか?
更新を実行してcommit(保存)を呼び出す前に検証するようにクエリをロールバック(元に戻す)する方法が必要な場合を除いて、必要ありません。
-
1ページで10回のようにトランザクションを開始する必要がありますか、それともページ全体で1回だけトランザクションを開始する必要がありますか、それとも各ページの最大数(たとえば、5回)をお勧めしますか?
必要な数だけ開始します。ページの読み込みごとに1つのことを行う可能性が高いため、ページごとに複数のトランザクションがあるとは思えません(つまり、送金)。