Kalozera wa Nkhani
MySQL databaseTransaction rollback kudzipatula/open concept/level processing php statement
MySQL Zochitika
Zochita za MySQL zimagwiritsidwa ntchito makamaka pokonza deta ndi ntchito zambiri komanso zovuta kwambiri.Mwachitsanzo, mu kasamalidwe ka antchito, ngati muchotsa munthu, muyenera kuchotsa zidziwitso zonse za munthuyo komanso zokhudzana ndi munthuyo, monga mabokosi amakalata, zolemba, ndi zina zambiri. kupanga transaction !
- Zochita zimathandizidwa mu MySQL pazosungidwa kapena matebulo omwe amagwiritsa ntchito injini ya database ya Innodb.
- Kusinthana kungagwiritsidwe ntchito kusunga kukhulupirika kwa nkhokwe, kuwonetsetsa kuti magulu a mawu a SQL onse amachitidwa kapena palibe aliyense wa iwo akuphedwa.
- Zochita zimagwiritsidwa ntchito kukonza kuyika, kusintha, kufufuta ziganizo
Nthawi zambiri, malonda akuyenera kukwaniritsa zinthu zinayi (ACID): Atomicity (atomicity), Consistency (kukhazikika), Kudzipatula (kudzipatula), Kukhazikika (kudalirika)
- 1,Atomicity of transactions:Gulu la zochitika zomwe zikuyenda bwino kapena kuchotsedwa.
- 2,bata:Pali deta yosaloledwa (zoletsa makiyi akunja ndi zina zotero), ndipo ntchitoyo imachotsedwa.
- 3,Kudzipatula:Zochita zimayenda paokha.Ngati zotsatira za malonda zikhudza zochitika zina, ndiye kuti zochitika zina zidzachotsedwa.Kudzipatula kwa 100% kwa zochitika, zomwe zimafuna kudzipereka mwachangu.
- 4,kudalilika:Pambuyo pa kuwonongeka kwa mapulogalamu ndi hardware, dalaivala wa tebulo la InnoDB adzagwiritsa ntchito fayilo ya chipika kuti akonzenso ndikusintha.Kudalirika komanso kuthamanga kwambiri sikungakhale nazo zonse ziwiri, njira ya innodb_flush_log_at_trx_commit imasankha nthawi yosunga zotuluka pa chipikacho.
Pansi pa zosintha zosasinthika za mzere wa malamulo a MySQL, zochitika zimangochitika zokha, ndiye kuti, ntchito ya COMMIT idzachitidwa nthawi yomweyo mawu a SQL ataperekedwa.Chifukwa chake, kuti mutsegule bwino ntchitoyo muyenera kugwiritsa ntchito lamulo BEGIN kapena START TRANSACTION, kapena perekani lamulo SET AUTOCOMMIT=0, kuti muletse kugwiritsa ntchito kudzipereka kwachangu pagawo lapano.
Dongosolo la Transaction Control:
- YAMBANI kapena YAMBIRITSANI NTCHITO; yambitsani bizinesiyo mwachindunji;
- DZIPEREKA; NTCHITO NTCHITO itha kugwiritsidwanso ntchito, koma ziwirizo ndi zofanana. COMMIT imachita zomwezo ndipo imapangitsa zosintha zonse zomwe zasungidwa ku database kukhala zamuyaya;
- ROLLBACK; ndizotheka kugwiritsa ntchito ROLLBACK WORK, koma ziwirizi ndizofanana.Rollback imathetsa ntchito za wogwiritsa ntchito ndikuchotsa zosintha zonse zomwe sizinachitike;
- Chizindikiritso cha SAVEPOINT; SAVEPOINT imalola kuti pakhale malo osungira mumgwirizano, ndipo pakhoza kukhala ma SAVEPOINT angapo pakugulitsa;
- tulutsani chizindikiritso cha SAVEPOINT; chotsani malo osungira, ngati palibe chosungira chodziwika, kuchita mawuwo kudzasiya;
- ROLLBACK TO identifier; tembenuzani malondawo mpaka pomwe;
- SET TRANSACTION; amagwiritsidwa ntchito kuyika mulingo wodzipatula wamalondawo. Injini yosungira ya InnoDB imapereka magawo odzipatula a READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, ndi SERIALIZABLE.
Pali njira ziwiri zazikulu zosinthira MYSQL transaction process:
1. Gwiritsani ntchito BEGIN, ROLLBACK, COMMIT kuti mukwaniritse
- YAMBA yambitsani malonda
- BWINO transaction rollback
- COMMIT kutsimikizira kachitidwe
2. Gwiritsani ntchito SET mwachindunji kuti musinthe mawonekedwe a auto-commit a MySQL:
- KHALANI NDI AUTOCOMMIT=0 Letsani kudzipereka kwadzidzidzi
- KHALANI NDI AUTOCOMMIT=1 Yatsani zochita zokha
mayeso a transaction
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>
Kugwiritsa ntchito Transaction Instances mu 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/ ) adagawana "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", zomwe ndi zothandiza kwa inu.
Takulandirani kugawana ulalo wa nkhaniyi:https://www.chenweiliang.com/cwl-494.html
Takulandilani panjira ya Telegraph yabulogu ya Chen Weiliang kuti mupeze zosintha zaposachedwa!
📚 Bukuli lili ndi phindu lalikulu, 🌟Uwu ndi mwayi wosowa, musaphonye! ⏰⌛💨
Share ndi like ngati mukufuna!
Kugawana kwanu ndi zomwe mumakonda ndizomwe zimatilimbikitsa nthawi zonse!