Adresář článků
MySQL databázeIzolace vrácení transakce/otevřený koncept/zpracování úrovně php
MySQL Záležitosti
Transakce MySQL se používají především ke zpracování dat s velkým množstvím operací a vysokou složitostí.Například v systému personálního managementu, pokud smažete osobu, musíte smazat jak základní informace o osobě, tak informace související s osobou, jako jsou poštovní schránky, články atd. Tímto způsobem se tyto výpisy z provozu databáze tvoří transakci!
- Transakce jsou v MySQL podporovány pouze pro databáze nebo tabulky, které používají databázový stroj Innodb.
- Zpracování transakcí lze použít k udržení integrity databáze, což zajistí, že se všechny dávky příkazů SQL provedou, nebo se nespustí žádný z nich.
- Transakce se používají ke správě vkládání, aktualizace, mazání výpisů
Obecně řečeno, transakce musí splňovat 4 podmínky (ACID): Atomicita (atomicita), Konzistence (stabilita), Izolace (izolace), Trvanlivost (spolehlivost)
- 1,Atomicita transakcí:Sada transakcí, které buď uspějí, nebo se stahují.
- 2,stabilita:Existují nezákonná data (omezení cizích klíčů a podobně) a transakce je stažena.
- 3,Izolace:Transakce probíhají nezávisle.Pokud výsledek transakce ovlivní jiné transakce, budou ostatní transakce staženy.100% izolace transakcí, což vyžaduje obětování rychlosti.
- 4,spolehlivost:Po selhání softwaru a hardwaru použije ovladač datové tabulky InnoDB soubor protokolu k jeho rekonstrukci a úpravě.Spolehlivost a vysoká rychlost nemohou mít obojí, volba innodb_flush_log_at_trx_commit určuje, kdy uložit transakce do protokolu.
Ve výchozím nastavení příkazového řádku MySQL jsou transakce automaticky potvrzeny, to znamená, že operace COMMIT bude provedena okamžitě po provedení příkazu SQL.Chcete-li tedy explicitně otevřít transakci, musíte použít příkaz BEGIN nebo START TRANSACTION nebo provést příkaz SET AUTOCOMMIT=0, abyste zakázali použití automatického potvrzení pro aktuální relaci.
Kontrolní prohlášení transakce:
- BEGIN nebo START TRANSACTION, explicitně zahájit transakci;
- Lze také použít COMMIT; COMMIT WORK, ale oba jsou ekvivalentní. COMMIT potvrdí transakci a provede všechny úpravy provedené v databázi jako trvalé;
- ROLLBACK; je možné použít ROLLBACK WORK, ale oba jsou ekvivalentní.Rollback ukončí transakci uživatele a vrátí zpět všechny probíhající neprovedené úpravy;
- Identifikátor SAVEPOINT: SAVEPOINT umožňuje vytvořit bod uložení v transakci a v transakci může být více bodů SAVEPOINT;
- RELEASE SAVEPOINT identifikátor, odstranění bodu uložení transakce, pokud není zadaný žádný bod uložení, provedení příkazu vyvolá výjimku;
- ROLLBACK TO identifikátor, vrátit transakci zpět k bodu;
- SET TRANSACTION; slouží k nastavení úrovně izolace transakce. Úložný modul InnoDB poskytuje úrovně izolace transakcí READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ a SERIALIZABLE.
Existují dva hlavní způsoby zpracování transakcí MYSQL:
1. K dosažení použijte BEGIN, ROLLBACK, COMMIT
- ZAČÍT zahájit transakci
- NÁVRAT vrácení transakce
- SPÁCHAT Potvrzení transakce
2. Pomocí SET přímo změňte režim automatického potvrzení MySQL:
- SETAUTOCOMMIT=0 Zakázat automatické potvrzení
- SETAUTOCOMMIT=1 Zapněte automatické potvrzení
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žití instancí transakcí 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/ ) sdílené „Izolace vrácení zpětných změn transakcí databáze MySQL/Otevřený koncept/Úroveň zpracování příkazů PHP“, což je pro vás užitečné.
Vítejte u sdílení odkazu na tento článek:https://www.chenweiliang.com/cwl-494.html
Vítejte na telegramovém kanálu blogu Chen Weiliang, kde získáte nejnovější aktualizace!
📚 Tento průvodce má obrovskou hodnotu, 🌟Toto je vzácná příležitost, nenechte si ji ujít! ⏰⌛💨
Sdílejte a lajkujte, pokud se vám líbí!
Vaše sdílení a lajky jsou naší neustálou motivací!