Article Directory
MySQL databaseTransaction rollback fitokanana/open concept/level processing php fanambarana
MySQL Affairs
Ny fifanakalozana MySQL dia ampiasaina indrindra amin'ny fanodinana angon-drakitra miaraka amin'ny asa be dia be sy be pitsiny.Ohatra, ao amin'ny rafi-pitantanana mpiasa, raha mamafa olona iray ianao dia mila mamafa ny fampahalalana fototra momba ilay olona sy ny fampahalalana mifandraika amin'ilay olona, toy ny boaty mailaka, lahatsoratra, sns. Amin'izany fomba izany, ireo fanambarana momba ny fiasan'ny database manao transaction!
- Ny fifampiraharahana dia tohana amin'ny MySQL ho an'ny angon-drakitra na tabilao mampiasa ny motera database Innodb.
- Ny fanodinana ny fifampiraharahana dia azo ampiasaina hitazomana ny fahamendrehan'ny angon-drakitra, hiantohana fa ny andiana fanambarana SQL dia vita avokoa na tsy misy na iray aza.
- Transactions dia ampiasaina hitantana ny fampidirana, fanavaozana, famafana fanambarana
Amin'ny ankapobeny, ny fifampiraharahana dia tsy maintsy mahafeno fepetra 4 (ACID): Atomicity (atomicity), Consistency (stability), Isolation (mitokana), durability (reliability)
- 1,Atomicity of transactions:Fiaraha-miasa izay mahomby na miala.
- 2,fitoniana:Misy angon-drakitra tsy ara-dalàna (faneriterena fanalahidy vahiny sy ny toy izany), ary esorina ny fifampiraharahana.
- 3,Fitokana-monina:Ny fifampiraharahana dia mandeha tsy miankina.Raha misy fiantraikany amin'ny fifampiraharahana hafa ny vokatry ny fifampiraharahana, dia hesorina ny fifampiraharahana hafa.Fitokanana 100% amin'ny fifampiraharahana noho ny hafainganam-pandeha.
- 4,azo itokisana:Aorian'ny fianjeran'ny lozisialy sy ny fitaovana, ny mpamily tabilao data InnoDB dia hampiasa ny rakitra log hanamboarana sy hanovana azy.Ny fahamendrehana sy ny hafainganam-pandeha avo dia tsy afaka manana azy roa, ny safidy innodb_flush_log_at_trx_commit dia mamaritra ny fotoana tokony hitahirizana ny fifanakalozana amin'ny log.
Eo ambanin'ny filaharana default amin'ny baikon'ny MySQL, ny fifampiraharahana dia atao ho azy, izany hoe, ny hetsika COMMIT dia hotanterahina avy hatrany rehefa vita ny fanambarana SQL.Noho izany, mba hanokafana mazava ny fifampiraharahana dia tsy maintsy mampiasa ny baiko BEGIN na START TRANSACTION, na manatanteraka ny baiko SET AUTOCOMMIT=0, mba hanesorana ny fampiasana automatique ho an'ny fivoriana ankehitriny.
Fanambarana fanaraha-maso ny fifampiraharahana:
- Atombohy na Atombohy ny TRANSACTION;
- COMMIT; COMMIT WORK dia azo ampiasaina ihany koa, fa ny roa dia mitovy. Ny COMMIT dia manao ny fifampiraharahana ary manao ny fanovana rehetra natao tamin'ny angon-drakitra ho maharitra;
- ROLLBACK; azo atao ny mampiasa ROLLBACK WORK, fa ny roa dia mitovy.Ny famerenana dia mamarana ny fifampiraharahana ataon'ny mpampiasa ary manafoana ny fanovana rehetra tsy natao;
- SAVEPOINT identifier; SAVEPOINT dia ahafahanao mamorona savepoint amin'ny fifanakalozana iray, ary mety misy SAVEPOINTs marobe amin'ny fifanakalozana;
- RELEASE SAVEPOINT identifier; esory ny savepoint amin'ny transaction iray, rehefa tsy misy savepoint voafaritra, ny fanatanterahana ny fanambarana dia hanisy exception;
- ROLLBACK AMIN'NY famantarana;
- SET TRANSACTION; ampiasaina hametrahana ny haavon'ny fitokana-monina. Ny motera fitehirizana InnoDB dia manome ny haavon'ny fitokana-monina amin'ny READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, ary SERIALIZABLE.
Misy fomba roa lehibe amin'ny fanodinana ny MYSQL:
1. Ampiasao ny BEGIN, ROLLBACK, COMMIT mba hahatratrarana
- NANOMBOKA manomboka fifampiraharahana
- MIVERINA fiverenana amin'ny fifanakalozana
- manao Fanamafisana ny fifampiraharahana
2. Mampiasà mivantana ny SET hanovana ny fomba fanolorana mandeha ho azy MySQL:
- SETAUTOCOMMIT=0 Atsaharo ny auto-commit
- SETAUTOCOMMIT=1 Alefaso ny auto-commit
andrana ara-barotra
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>
Mampiasa Transaction Instances amin'ny 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/ ) nizara ny "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", izay manampy anao.
Tongasoa eto mizara ny rohy amin'ity lahatsoratra ity:https://www.chenweiliang.com/cwl-494.html
Tongasoa eto amin'ny fantsona Telegram an'ny bilaogin'i Chen Weiliang hahazoana vaovao farany!
📚 Ity torolalana ity dia misy sanda lehibe, 🌟Ity dia fotoana tsy fahita firy, aza adino! ⏰⌛💨
Partageo ary j'aime raha tianao!
Ny fizaranao sy ny j'aime no antony manosika anay hatrany!