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

Potvrzení a transakce MySQL

V InnoDB nemusíte explicitně spouštět nebo ukončovat transakce pro jednotlivé dotazy, pokud jste nezměnili výchozí nastavení automatického potvrzení, které je "zapnuto". Pokud je autocommit zapnuté, InnoDB automaticky uzavře každý jednotlivý SQL dotaz do transakce, což je ekvivalent START TRANSACTION; query; COMMIT; .

Pokud výslovně použijete START TRANSACTION v InnoDB se zapnutým automatickým potvrzením a poté všechny dotazy provedené po START TRANSACTION buď budou provedeny všechny, nebo všechny selžou. To je užitečné například v bankovním prostředí:pokud převádím 500 USD na váš bankovní účet, tato operace by měla být úspěšná pouze tehdy, pokud byla částka odečtena z mého bankovního zůstatku a přidána k vašemu. Takže v tomto případě byste spustili něco jako

START TRANSACTION;
UPDATE customers SET balance = balance - 500 WHERE customer = 'Daan';
UPDATE customers SET balance = balance + 500 WHERE customer = 'Dennis';
COMMIT;

Tím je zajištěno, že buď budou úspěšně spuštěny oba dotazy, nebo žádný, ale ne pouze jeden. Tento příspěvek obsahuje další informace o tom, kdy byste měli používat transakce.

V InnoDB budete muset velmi zřídka zamykat celé tabulky; InnoDB, na rozdíl od MyISAM, podporuje zamykání na úrovni řádků. To znamená, že klienti nemusí zamykat celou tabulku, což nutí ostatní klienty čekat. Klienti by měli zamykat pouze řádky, které skutečně potřebují, a umožnit tak ostatním klientům pokračovat v přístupu k řádkům, které potřebují.

Více o transakcích InnoDB si můžete přečíst zde . Vaše dotazy týkající se zablokování jsou zodpovězeny v sekcích 14.2.8.8 a 14.2.8.9 z dokumentů. Pokud dotaz selže, váš ovladač MySQL vrátí chybovou zprávu s uvedením důvodu; vaše aplikace by pak měla v případě potřeby znovu zadat dotazy.

Nakonec jste ve svém příkladu kódu použili mysql_query . Pokud píšete nový kód, přestaňte prosím používat starý, pomalý a zastaralý mysql_ knihovnu pro PHP a použijte mysqli_ nebo místo toho CHOP :)




  1. Celočíselné pole MySQL je v PHP vráceno jako řetězec

  2. Obnovte strukturu tabulky ze souborů frm a ibd

  3. Schéma databáze průzkumů

  4. MYSQL sum() pro různé řádky