Chinyorwa Directory
MySQL databaseTransaction rollback yekuzviparadzanisa / yakavhurika pfungwa / nhanho kugadzirisa php chirevo
MySQL Zvinhu
MySQL transactions inonyanya kushandiswa kugadzirisa data nehuwandu hwekushanda uye kuoma kwakanyanya.Semuyenzaniso, mune yevashandi manejimendi system, kana ukadzima munhu, unofanirwa kudzima zvese zviri zviviri ruzivo rwemunhu uye ruzivo rwunechekuita nemunhu, semabhokisi etsamba, zvinyorwa, nezvimwe. Nenzira iyi, izvi dhatabhesi mashandiro ekutaura. gadzira kutengeserana!
- Transactions inotsigirwa muMySQL chete yedhatabhesi kana matafura anoshandisa Innodb database injini.
- Transaction process inogona kushandiswa kuchengetedza kutendeseka kweiyo dhatabhesi, kuve nechokwadi chekuti mabheti ezvirevo zveSQL anogona kuurayiwa kana kuti hapana anourayiwa.
- Transactions inoshandiswa kubata kuisa, kugadzirisa, kudzima zvirevo
Kazhinji kutaura, kutengeserana kunofanirwa kusangana ne4 mamiriro (ACID): Atomicity (atomicity), Consistency (kugadzikana), Isolation (kuzviparadzanisa), Kusimba (kuvimbika)
- 1,Atomicity yekutengeserana:Seti yekutengeserana inogona kubudirira kana kubvisa.
- 2,kugadzikana:Iko kune zvisiri pamutemo data (yekunze kiyi zvipingaidzo uye nezvimwe), uye kutengeserana kunobviswa.
- 3,Kuiswa kwemurwere kwake ega:Transactions inomhanya yakazvimirira.Kana mhedzisiro yekutengeserana ikakanganisa mamwe mabatiro, ipapo mamwe matransaction anozobviswa.100% kuparadzaniswa kwekutengeserana, izvo zvinoda kuzvipira nekukurumidza.
- 4,kuvimbika:Mushure mekuparara kwesoftware nehardware, mutyairi wetafura yeInnoDB achashandisa faira regi kuti rivakezve uye rigadzirise.Kuvimbika uye kumhanya kwakanyanya hakugone kuve nezvose, iyo innodb_flush_log_at_trx_commit sarudzo inosarudza nguva yekuchengetedza matransports kune irogi.
Pasi pezvigadziriso zvemutsetse weMySQL mutsara, kutengeserana kunoitwa otomatiki, ndiko kuti, mashandiro eCOMMIT achaitwa nekukurumidza mushure mekunge chirevo cheSQL chaitwa.Naizvozvo, kuti utange kutengeserana zviripachena, unofanira kushandisa murairo KUTANGA kana KUTANGA TRANSACTION, kana kuita murairo SET AUTOCOMMIT=0, kudzima kushandiswa kwekuita otomatiki pachikamu chazvino.
Transaction control statement:
- TANGA kana KUTANGA TRANSACTION; tanga kutengeserana pachena;
- COMMIT; ITA BASA rinogona zvakare kushandiswa, asi izvo zviviri zvakafanana. COMMIT inoita kutengeserana uye inoita kuti zvese zvigadziriso zviitwe kune dhatabhesi zvachose;
- ROLLBACK; zvinogoneka kushandisa ROLLBACK BASA, asi izvo zviviri zvakaenzana.Rollback inopedza kutengeserana kwemushandisi uye inogadzirisa zvese zvisina kuvimbiswa zvigadziriso zviri kuitika;
- SAVEPOINT identifier; SAVEPOINT inobvumira kugadzira nzvimbo yekuchengetedza mukutengeserana, uye panogona kunge paine akawanda SAVEPOINTs mukutengeserana;
- RUDZIRA SAVEPOINT identifier; bvisa nzvimbo yekuchengetedza yekutengeserana, kana pasina yakatsanangurwa yekuchengetedza, kuita chirevo kunokanda kunze;
- ROLLBACK KUTI identifier; dzosera kumashure kutengeserana kune iyo poindi;
- SET TRANSACTION; inoshandiswa kuseta iyo yekuzviparadzanisa nhanho yekutengeserana. Iyo InnoDB yekuchengetedza injini inopa transaction yekuzviparadzanisa mazinga e VERENGA USINA KUPIMWA, VERENGA ZVINOITWA, REPEATABLE VERENGA, uye SERIALIZABLE.
Pane nzira mbiri huru dzeMYSQL transaction process:
1. Shandisa BEGIN, ROLLBACK, COMMIT kuti uwane
- TANGIRA tanga kutengeserana
- BUDIRIRA KUDZOKERA transaction rollback
- COMMIT kutengeserana kusimbiswa
2. Shandisa SET zvakananga kuchinja MySQL's auto-commit mode:
- GADZIRA AUTOCOMMIT=0 Dzima auto-commit
- GADZIRA AUTOCOMMIT=1 Batidza auto-commit
kutengeserana bvunzo
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>
Kushandisa Transaction Instances muPHP
MySQL ORDER BY bvunzo:
<? 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/ ) yakagovaniswa "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", iyo inobatsira kwauri.
Welcome to share link yechinyorwa chino:https://www.chenweiliang.com/cwl-494.html
Tikugashirei kuTeregiramu chiteshi cheChen Weiliang's blog kuti uwane zvichangobva kuitika!
📚 Iri gwara rine kukosha kukuru, 🌟Uyu mukana usingawanzo, usapotsa! ⏰⌛💨
Govera uye like kana uchida!
Kugovera kwako uye kuda ndiko kukurudzira kwedu kunoramba kuripo!