Isalathiso senqaku
MySQL databaseUkwahlulwa kwentengiselwano umva/ingqikelelo evulekileyo/inqanaba lokusetyenzwa kwengxelo yephp
MySQL Imicimbi
Ukuthengiselana kwe-MySQL kusetyenziselwa ikakhulu ukucubungula idatha kunye nenani elikhulu lemisebenzi kunye nobunzima obuphezulu.Ngokomzekelo, kwinkqubo yolawulo lwabasebenzi, ukuba ucima umntu, kufuneka ucime zombini ulwazi olusisiseko lomntu kunye nolwazi olunxulumene nomntu, njengebhokisi yeposi, amanqaku, njl. yenza intengiselwano !
- Iintengiselwano zixhaswa kwi-MySQL kuphela kwiziko ledatha okanye iitafile ezisebenzisa i-injini yedatha ye-Innodb.
- Ukusetyenzwa kwentengiselwano kungasetyenziselwa ukugcina ingqibelelo yesiseko sedatha, ukuqinisekisa ukuba iibhetshi zeenkcazo ze-SQL mhlawumbi zonke zenziwe okanye akukho nanye yazo eyenziwayo.
- Iintengiselwano zisetyenziselwa ukulawula ukufaka, ukuhlaziya, ukucima iingxelo
Ngokuqhelekileyo, ukuthengiselana kufuneka kuhlangabezane neemeko ze-4 (ACID): I-Atomicity (i-atomicity), i-Consistency (uzinzo), Ukuzihlukanisa (ukwahlula), Ukuqina (ukuthembeka)
- 1,Iatomicity yentengiselwano:Iseti yentengiselwano enokuthi iphumelele okanye irhoxe.
- 2,uzinzo:Kukho idatha engekho mthethweni (izithintelo zezitshixo zangaphandle kunye nokunye okunjalo), kwaye ukuthengiselana kuhoxisiwe.
- 3,Ukubekwa wedwa:Iintengiselwano ziqhutywa ngokuzimeleyo.Ukuba isiphumo sentengiselwano sichaphazela ezinye iintengiselwano, ke ezinye iintengiselwano ziya kurhoxiswa.I-100% yodwa yentengiselwano ngeendleko zesantya.
- 4,ukuthembeka:Emva kokuphazamiseka kwesoftware kunye nehardware, umqhubi wetafile yedatha ye-InnoDB uya kusebenzisa ifayile yelog ukuyilungisa kwaye uyiguqule.Ukuthembeka kunye nesantya esiphezulu akunakuba nazo zombini, i-innodb_flush_log_at_trx_commit ukhetho lumisela ixesha lokugcinwa kwentengiselwano kwilog.
Ngaphantsi kwemimiselo engagqibekanga yomgca womyalelo we-MySQL, ukuthengiselana kwenziwa ngokuzenzekelayo, oko kukuthi, umsebenzi we-COMMIT uya kuphunyezwa ngokukhawuleza emva kokuba isitatimende se-SQL senziwa.Ke ngoko, ukuvula intengiselwano ngokucacileyo kufuneka usebenzise umyalelo othi QALISA okanye QALA INTATHELO, okanye wenze umyalelo SET AUTOCOMMIT=0, ukuyekisa ukusetyenziswa kokuzibophelela okuzenzekelayo kwiseshoni yangoku.
Ingxelo yolawulo lwentengiselwano:
- QALISA okanye QALISA INKCAZELO; qala intengiselwano ngokucacileyo;
- ZINIKELA; YENZA UMSEBENZI kusenokusetyenziswa, kodwa ezi zimbini ziyalingana. I-COMMIT yenza intengiselwano kwaye yenza zonke izilungiso ezenziwe kwiziko ledatha ngokusisigxina;
- I-ROLLBACK; kuyenzeka ukusebenzisa i-ROLLBACK WORK, kodwa ezi zimbini ziyalingana.I-Rollback iphelisa intengiselwano yomsebenzisi kwaye ihlehlise naluphi na uhlengahlengiso oluqhubekayo oluqhubekayo;
- Isichongi se-SAVEPOINT; I-SAVEPOINT ivumela ukudala indawo yokugcina kwintengiselwano, kwaye kunokubakho ii-SAVEPOINT ezininzi kwintengiselwano;
- KHULULA isichongi se-SAVEPOINT, cima indawo yokugcina yentengiselwano, xa kungekho ndawo yogcino ichaziweyo, ukwenza ingxelo kuya kukwenza umrhumo;
- ROLBACK TO isazisi, buyisela umva intengiselwano ukuya kwindawo;
- I-SET TRANSATION isetyenziselwa ukuseta inqanaba lokuzahlula lentengiselwano. Injini yokugcina ye-InnoDB ibonelela ngamanqanaba okuthengiselana okukodwa kwe-FUNDA ONGAQINISEKISAYO, FUNDA UZINIKELE, UPHINDA UFUNDE, kunye ne-SERIALIZABLE.
Kukho iindlela ezimbini eziphambili zokusetyenzwa kwe-MYSQL:
1. Sebenzisa i-QALA, i-ROLLBACK, i-COMMIT ukuze ufezekise
- QALA qala intengiselwano
- UMQULU ukubuyisela umva intengiselwano
- ZIBOPHE Uqinisekiso lwentengiselwano
2. Sebenzisa i-SET ngokuthe ngqo ukutshintsha imo ye-MySQL's auto-commit mode:
- CELA I-AutoCOMMIT=0 Khubaza ukuzibophelela okuzenzekelayo
- CELA I-AutoCOMMIT=1 Layita ukuzibophelela okuzenzekelayo
uvavanyo lwentengiselwano
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>
Ukusebenzisa iimeko zeTransaction kwi-PHP
I-MySQL i-ORDER ngovavanyo:
<? 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); ?>
Ndiyathemba Chen Weiliang Blog ( https://www.chenweiliang.com/ ) wabelane nge "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", eluncedo kuwe.
Wamkelekile ukwabelana ngekhonkco leli nqaku:https://www.chenweiliang.com/cwl-494.html
Wamkelekile kwisitishi seTelegram sebhlog kaChen Weiliang ukufumana uhlaziyo lwamva nje!
📚 Esi sikhokelo sinexabiso elikhulu, 🌟Eli lithuba elinqabileyo, ungaliphoswa! ⏰⌛💨
Yabelana kwaye uthanda ukuba uyathanda!
Ukwabelana kwakho kunye nezinto ozithandayo ziyinkuthazo yethu eqhubekayo!