Artikel Verzeechnes
MySQL DatebankTransaktioun Rollback Isolatioun / oppe Konzept / Niveau Veraarbechtung php Ausso
MySQL Affären
MySQL Transaktioune ginn haaptsächlech benotzt fir Daten mat enger grousser Quantitéit vun Operatiounen an héijer Komplexitéit ze veraarbecht.Zum Beispill, am Personalverwaltungssystem, wann Dir eng Persoun läscht, musst Dir souwuel d'Basisinformatioun vun der Persoun wéi och d'Informatioun am Zesummenhang mat der Persoun läschen, wéi Mailboxen, Artikelen, etc.. An dëser Aart a Weis, dës Datebank Operatioun Aussoen eng Transaktioun ausmaachen!
- Transaktioune ginn an MySQL nëmme fir Datenbanken oder Dëscher ënnerstëtzt déi den Innodb Datebankmotor benotzen.
- Transaktiounsveraarbechtung kann benotzt ginn fir d'Integritéit vun der Datebank z'erhalen, fir sécherzestellen datt Chargen vu SQL Aussoen entweder all ausgefouert ginn oder keng vun hinnen ausgefouert ginn.
- Transaktioune gi benotzt fir Insert, Update, Läschen Aussoen ze managen
Allgemeng musse Transaktioune 4 Bedéngungen erfëllen (SAID): Atomizitéit (Atomizitéit), Konsistenz (Stabilitéit), Isolatioun (Isolatioun), Haltbarkeet (Zouverlässegkeet)
- 1,Atomitéit vun Transaktiounen:Eng Rei vun Transaktiounen déi entweder gelengt oder zréckzéien.
- 2,Stabilitéit:Et gëtt illegal Donnéeën (auslännesch Schlësselbeschränkungen an dergläiche), an d'Transaktioun gëtt zréckgezunn.
- 3,Isoléierung:Transaktioune lafen onofhängeg.Wann d'Resultat vun enger Transaktioun aner Transaktiounen beaflosst, da ginn aner Transaktiounen zréckgezunn.100% Isolatioun vun Transaktiounen op Käschte vun Vitesse.
- 4,Zouverlässegkeet:Nom Software an Hardware Crash benotzt den InnoDB Datentabelle Chauffer d'Logdatei fir se ze rekonstruéieren an z'änneren.Zouverlässegkeet an Héichgeschwindegkeet kënnen net béid hunn, d'innodb_flush_log_at_trx_commit Optioun bestëmmt wéini Transaktiounen am Logbuch späicheren.
Ënnert den Default-Astellunge vun der MySQL Kommandozeil ginn Transaktiounen automatesch engagéiert, dat heescht, d'COMMIT-Operatioun gëtt direkt no der Ausféierung vun der SQL Ausso ausgefouert.Dofir, fir explizit eng Transaktioun opzemaachen, muss de Kommando BEGIN oder TRANSACTION STARTEN benotzen, oder de Kommando ausféieren SET AUTOCOMMIT=0, fir d'Benotzung vum automateschen Engagement fir déi aktuell Sessioun auszeschalten.
Transaktiounskontrollerklärung:
- BEGIN oder TRANSAKTION STARTEN; explizit eng Transaktioun starten;
- COMMIT; COMMIT WORK kann och benotzt ginn, awer déi zwee sinn gläichwäerteg. COMMIT engagéiert d'Transaktioun a mécht all Ännerungen an der Datebank permanent;
- ROLLBACK; et ass méiglech ROLLBACK WORK ze benotzen, awer déi zwee sinn gläichwäerteg.D'Rollback endet d'Transaktioun vum Benotzer an entlooss all onengagéiert Ännerungen am Fortschrëtt;
- SAVEPOINT Identifizéierer; SAVEPOINT erlaabt e Späicherpunkt an enger Transaktioun ze kreéieren, an et kënne verschidde SAVEPOINTs an enger Transaktioun sinn;
- RELEASE SAVEPOINT Identifizéierer; läscht e Spuerpunkt vun enger Transaktioun, wann et kee spezifizéierte Spuerpunkt gëtt, d'Ausféierung vun der Ausso wäert eng Ausnam werfen;
- ROLLBACK TO Identifier; rullt d'Transaktioun op de Punkt zréck;
- SET TRANSACTION; benotzt fir den Isolatiounsniveau vun der Transaktioun ze setzen. Den InnoDB Späichermotor liwwert Transaktiounsisolatiounsniveauen vu VIRLIESEN UNCOMMITTED, VIRLIESEN ENGAGEMENT, REPEATABLE LEES, a SERIALIZABLE.
Et ginn zwou Haaptmethoden fir MYSQL Transaktiounsveraarbechtung:
1. Benotzt BEGIN, ROLLBACK, COMMIT fir z'erreechen
- BEGINN eng Transaktioun ufänken
- ROLL BACK Transaktioun Réckroll
- ENGAGÉIEREN Transaktioun Bestätegung
2. Benotzt SET direkt fir den Auto-Commit Modus vum MySQL z'änneren:
- SETAUTOCOMMIT=0 Auto-Verpflichtung auszeschalten
- SETAUTOCOMMIT=1 Aktivéiert Auto-Verpflichtung
Transaktioun 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>
Benotzt Transaktiounsinstanzen an 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); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeelt "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", wat fir Iech hëllefräich ass.
Wëllkomm de Link vun dësem Artikel ze deelen:https://www.chenweiliang.com/cwl-494.html
Wëllkomm op dem Telegram Kanal vum Chen Weiliang säi Blog fir déi lescht Updates ze kréien!
📚 Dëse Guide enthält en enorme Wäert, 🌟 Dëst ass eng selten Geleeënheet, verpasst et net! ⏰⌛💨
Deelen a liken wann dir wëllt!
Är Deelen a Likes sinn eis kontinuéierlech Motivatioun!