Artikelgids
MySQL databasisTransaksie terugrol isolasie / oop konsep / vlak verwerking php verklaring
MySQL Sake
MySQL-transaksies word hoofsaaklik gebruik om data met 'n groot hoeveelheid bewerkings en hoë kompleksiteit te verwerk.Byvoorbeeld, in die personeelbestuurstelsel, as jy 'n persoon uitvee, moet jy beide die basiese inligting van die persoon en die inligting wat met die persoon verband hou, soos posbusse, artikels, ensovoorts uitvee. Op hierdie manier, hierdie databasis-operasiestellings 'n transaksie uitmaak!
- Transaksies word slegs in MySQL ondersteun vir databasisse of tabelle wat die Innodb-databasisenjin gebruik.
- Transaksieverwerking kan gebruik word om die integriteit van die databasis te handhaaf, om te verseker dat groepe SQL-stellings óf almal uitgevoer word óf nie een van hulle word uitgevoer nie.
- Transaksies word gebruik om state in te voeg, op te dateer, uit te vee
Oor die algemeen moet 'n transaksie aan 4 voorwaardes (SUUR) voldoen: Atomisiteit (atomisiteit), Konsekwentheid (stabiliteit), Isolasie (isolasie), Duursaamheid (betroubaarheid)
- 1,Atomiteit van transaksies:'n Stel transaksies wat óf slaag óf onttrek.
- 2,stabiliteit:Daar is onwettige data (buitelandse sleutelbeperkings en dies meer), en die transaksie word teruggetrek.
- 3,Isolasie:Transaksies word onafhanklik uitgevoer.As die resultaat van 'n transaksie ander transaksies beïnvloed, sal ander transaksies teruggetrek word.100% isolasie van transaksies ten koste van spoed.
- 4,betroubaarheid:Na die sagteware- en hardeware-ongeluk, sal die InnoDB-datatabelbestuurder die loglêer gebruik om dit te rekonstrueer en te wysig.Betroubaarheid en hoë spoed kan nie albei hê nie, die innodb_flush_log_at_trx_commit opsie bepaal wanneer om transaksies in die log te stoor.
Onder die verstekinstellings van die MySQL-opdragreël word transaksies outomaties gepleeg, dit wil sê, die COMMIT-bewerking sal onmiddellik uitgevoer word nadat die SQL-stelling uitgevoer is.Daarom, om 'n transaksie uitdruklik oop te maak, moet die opdrag BEGIN of BEGIN TRANSAKSIE gebruik, of die opdrag SET AUTOCOMMIT=0 uitvoer, om die gebruik van outomatiese commit vir die huidige sessie te deaktiveer.
Transaksiebeheerverklaring:
- BEGIN of BEGIN TRANSAKSIE; begin 'n transaksie uitdruklik;
- VERPLEEG; VERPLEEG WERK kan ook gebruik word, maar die twee is gelykstaande. COMMIT verbind die transaksie en maak alle wysigings wat aan die databasis gemaak word permanent;
- ROLLBACK; dit is moontlik om ROLLBACK WORK te gebruik, maar die twee is gelykstaande.Terugdraai beëindig die gebruiker se transaksie en maak alle onverbonde wysigings wat aan die gang is, ongedaan;
- SAVEPOINT identifiseerder; SAVEPOINT laat toe om 'n stoorpunt in 'n transaksie te skep, en daar kan veelvuldige SPAARPUNTE in 'n transaksie wees;
- VRYS STOORPUNT identifiseerder; skrap 'n stoorpunt van 'n transaksie, wanneer daar geen gespesifiseerde stoorpunt is nie, sal die uitvoering van die stelling 'n uitsondering veroorsaak;
- TERUG TERUG NA identifiseerder; rol die transaksie terug na die punt;
- STEL TRANSAKSIE; word gebruik om die isolasievlak van die transaksie te stel. Die transaksie-isolasievlakke wat deur die InnoDB-bergingsenjin verskaf word, is LEES ONVERBIND, LEES VERBIN, HERHAALBAAR LEES en SERIELISEERBAAR.
Daar is twee hoofmetodes van MYSQL-transaksieverwerking:
1. Gebruik BEGIN, ROLLBACK, COMMIT om te bereik
- Begin 'n transaksie begin
- TERUGVOER transaksie terugrol
- PLEEG Transaksie bevestiging
2. Gebruik SET direk om MySQL se outo-commit-modus te verander:
- STEL AUTOCOMMIT=0 Deaktiveer outo-commit
- STEL AUTOCOMMIT=1 Skakel outo-commit aan
transaksie toets
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>
Gebruik transaksiegevalle in PHP
MySQL BESTELLING PER toets:
<? 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); ?>
Hoop Chen Weiliang Blog ( https://www.chenweiliang.com/ ) het "MySQL Database Transaction Rollback Isolation/Oop Concept/Level Processing of PHP Statements" gedeel, wat vir jou nuttig is.
Welkom om die skakel van hierdie artikel te deel:https://www.chenweiliang.com/cwl-494.html
Welkom by die Telegram-kanaal van Chen Weiliang se blog om die nuutste opdaterings te kry!
📚 Hierdie gids bevat groot waarde, 🌟Dit is 'n seldsame geleentheid, moet dit nie misloop nie! ⏰⌛💨
Share en like as jy wil!
Jou deel en laaiks is ons voortdurende motivering!