sql >> データベース >  >> RDS >> Mysql

MySQLトランザクションはいつ使用する必要がありますか?

    トランザクションは、すべてが相互に依存するクエリのグループがある場合に使用されます。

    例:銀行:

    • 銀行の顧客「ジョン」は「アリス」の口座に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つのことを行う可能性が高いため、ページごとに複数のトランザクションがあるとは思えません(つまり、送金)。



    1. GROUPBYを使用しない集約クエリ

    2. PostgreSQL/NodeJSを使用して結果の配列としてJOINテーブルを取得します

    3. PostgreSQLの権限とユーザー管理-知っておくべきこと

    4. HttpHandlerを使用したデータベース化された画像のストリーミング