sql >> Databáze >  >> RDS >> Mysql

Kdy bych měl používat transakce MySQL?

Transakce se používají, když máte skupinu dotazů, které na sobě všechny závisí.

Například banka:

  • Zákazník banky „John“ převede 100 USD na účet „Alice“.
  • V tomto příkladu existují 2 dotazy (nezobrazuji protokolování ani historii transakcí... atd.). Z Johnova zůstatku musíte odečíst 100 $ a přidat je k Alicině zůstatku.
  • Start transaction
  • Odečíst od Jana
    • UPDATE accounts SET balance=balance-100 WHERE account='John'
  • Přidat k Alici
    • UPDATE accounts SET balance=balance+100 WHERE account='Alice'
  • commit

Transakce se neuloží, dokud ji nepotvrdíte. Pokud tedy došlo k chybě v některém z dotazů, můžete zavolat rollback a vrátit zpět všechny dotazy, které byly spuštěny od zahájení transakce. Pokud z nějakého důvodu selhal dotaz na přidání 100 $ k Alici, můžete se vrátit a neodečíst 100 $ od Johna. Je to způsob, jak zajistit, že můžete v případě potřeby automaticky vrátit zpět dotazy.

  • Mám zahájit transakci, když vykonám dva nebo více dotazů na odstranění/aktualizaci/vložení?

    Závisí na tom, co dotazy dělají.

  • Mám také zahájit transakci, když mám pouze jeden dotaz na odstranění/aktualizaci/vložení?

    Není nutné, pokud jste nepotřebovali způsob, jak vrátit (vrátit zpět) dotaz, jako chcete provést aktualizaci a ověřit jej před voláním commit (uložit).

  • Mám zahájit transakci například 10krát na stránce, nebo lépe pouze jednou za celou stránku, nebo doporučujete maximum pro každou stránku (například 5)?

    Začněte tolik, kolik potřebujete. Pochyboval bych, že máte více transakcí na stránce, protože byste s největší pravděpodobností dělali jednu věc při každém načtení stránky (tj. převáděli peníze).



  1. Prázdná místa v názvech sloupců s MySQL

  2. IntentService zamrzá uživatelské rozhraní mé aplikace

  3. Proč pořadí řazení varchar společnosti Oracle neodpovídá chování srovnání varchar?

  4. Nelze použít objekt typu PDOStatement jako pole