Adresár článkov
Databáza MySQLPríkaz php Izolácia vrátenia transakcie/otvorený koncept/úroveň spracovania
MySQL záležitosti
Transakcie MySQL sa používajú najmä na spracovanie údajov s veľkým množstvom operácií a vysokou zložitosťou.Napríklad v systéme personálneho manažmentu, ak vymažete osobu, musíte vymazať základné informácie o osobe aj informácie súvisiace s osobou, ako sú poštové schránky, články atď. predstavujú transakciu!
- Transakcie sú v MySQL podporované len pre databázy alebo tabuľky, ktoré používajú databázový stroj Innodb.
- Spracovanie transakcií možno použiť na udržanie integrity databázy, čím sa zabezpečí, že sa všetky dávky príkazov SQL vykonajú alebo sa nevykonajú žiadne.
- Transakcie sa používajú na správu vloženia, aktualizácie, vymazania výpisov
Všeobecne povedané, transakcie musia spĺňať 4 podmienky (ACID): Atomicita (atomickosť), Konzistentnosť (stabilita), Izolácia (izolácia), Trvanlivosť (spoľahlivosť)
- 1,Atomicita transakcií:Súbor transakcií, ktoré sú úspešné alebo sa stiahnu.
- 2,stabilita:Existujú nezákonné údaje (obmedzenia cudzích kľúčov a podobne) a transakcia je stiahnutá.
- 3,Izolácia:Transakcie prebiehajú nezávisle.Ak výsledok transakcie ovplyvní iné transakcie, ostatné transakcie budú stiahnuté.100% izolácia transakcií na úkor rýchlosti.
- 4,spoľahlivosť:Po zlyhaní softvéru a hardvéru ovládač tabuľky údajov InnoDB použije súbor denníka na jeho rekonštrukciu a úpravu.Spoľahlivosť a vysoká rýchlosť nemôžu mať oboje, voľba innodb_flush_log_at_trx_commit určuje, kedy sa majú uložiť transakcie do protokolu.
V predvolenom nastavení príkazového riadku MySQL sa transakcie automaticky potvrdia, to znamená, že operácia COMMIT sa vykoná ihneď po vykonaní príkazu SQL.Preto na explicitné otvorenie transakcie musíte použiť príkaz BEGIN alebo START TRANSACTION alebo vykonať príkaz SET AUTOCOMMIT=0, aby ste zakázali používanie automatického odovzdania pre aktuálnu reláciu.
Kontrolný výpis transakcie:
- ZAČAŤ alebo ZAČAŤ TRANSAKCIU, explicitne začať transakciu;
- Možno použiť aj COMMIT; COMMIT WORK, ale obe sú ekvivalentné. COMMIT potvrdí transakciu a urobí všetky zmeny vykonané v databáze trvalými;
- ROLLBACK; je možné použiť ROLLBACK WORK, ale obe sú ekvivalentné.Vrátenie ukončí transakciu používateľa a zruší všetky prebiehajúce nepotvrdené úpravy;
- Identifikátor SAVEPOINT, SAVEPOINT umožňuje vytvoriť bod uloženia v transakcii a v transakcii môže byť viacero bodov SAVEPOINT;
- RELEASE SAVEPOINT identifikátor, vymazanie bodu uloženia transakcie, ak nie je určený žiadny bod uloženia, vykonanie príkazu vyvolá výnimku;
- ROLLBACK TO identifikátor, vrátiť transakciu späť k bodu;
- SET TRANSACTION; používa sa na nastavenie úrovne izolácie transakcie. Úrovne izolácie transakcií, ktoré poskytuje ukladací mechanizmus InnoDB, sú NEPOTVRDNÉ ČÍTANIE, ČÍTANIE potvrdené, OPAKOVATEĽNÉ ČÍTANIE a SERIALIZAČNÉ.
Existujú dva hlavné spôsoby spracovania transakcií MYSQL:
1. Použite BEGIN, ROLLBACK, COMMIT na dosiahnutie
- ZAČAŤ začať transakciu
- VRÁTIŤ SA SPÄŤ vrátenie transakcie
- COMMIT Potvrdenie transakcie
2. Použite SET priamo na zmenu režimu automatického potvrdenia MySQL:
- SETAUTOCOMMIT=0 Zakázať automatické zadávanie
- SETAUTOCOMMIT=1 Zapnite automatické zadávanie
transakčný test
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
Používanie inštancií transakcií v PHP
MySQL ORDER BY test:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) zdieľal „Izolácia vrátenia zmien transakcií databázy MySQL/Otvorený koncept/Úroveň spracovania príkazov PHP“, čo je pre vás užitočné.
Vitajte pri zdieľaní odkazu na tento článok:https://www.chenweiliang.com/cwl-494.html
Vitajte na telegramovom kanáli blogu Chen Weiliang, kde získate najnovšie aktualizácie!
📚 Táto príručka obsahuje obrovskú hodnotu, 🌟Toto je vzácna príležitosť, nenechajte si ju ujsť! ⏰⌛💨
Ak sa vám páči, zdieľajte a lajkujte!
Vaše zdieľanie a lajky sú našou neustálou motiváciou!