Littafin Adireshi
MySQL databaseMa'amala rollback keɓewa / buɗaɗɗen ra'ayi / bayanin php sarrafa matakin
MySQL Harkokin
Ana amfani da ma'amaloli na MySQL don aiwatar da bayanai tare da adadi mai yawa na ayyuka da rikitarwa mai yawa.Misali, a tsarin kula da ma’aikata, idan ka goge mutum, kana bukatar ka goge bayanan sirrin mutum da kuma bayanan da suka shafi mutum, kamar akwatin wasiku, kasidu da sauransu. Ta wannan hanyar, wadannan bayanan aiki na bayanai zama ma'amala!
- Ana tallafawa ma'amaloli a cikin MySQL kawai don bayanan bayanai ko teburi waɗanda ke amfani da injin bayanan Innodb.
- Ana iya amfani da sarrafa ma'amala don kiyaye amincin bayanan, tabbatar da cewa batches na bayanan SQL an aiwatar da su duka ko kuma ba a aiwatar da ɗayansu ba.
- Ana amfani da ma'amaloli don sarrafa sakawa, sabuntawa, share bayanai
Gabaɗaya magana, ma'amaloli dole ne su cika sharuɗɗan 4 (ACID): Atomity (atomicity), daidaito (kwanciyar hankali), kaɗaici (keɓancewa), Durability (aminci)
- 1ã € Atomity na ma'amaloli:Saitin ma'amaloli wanda ko dai yayi nasara ko janyewa.
- 2ã € kwanciyar hankali:Akwai bayanan da ba bisa ka'ida ba (maɓallin maɓalli na ƙasashen waje da makamantansu), kuma an cire cinikin.
- 3ã € Kaɗaici:Ma'amaloli suna gudana kai tsaye.Idan sakamakon ciniki ya shafi sauran ma'amaloli, to za a janye sauran hada-hadar.100% kadaici na ma'amaloli a kudi na sauri.
- 4ã € amintacce:Bayan hadarin software da hardware, direban tebur na InnoDB zai yi amfani da fayil ɗin log don sake ginawa da gyara shi.Dogaro da babban gudu ba za su iya samun duka biyun ba, zaɓin innodb_flush_log_at_trx_commit yana ƙayyade lokacin da za a adana ma'amaloli zuwa log ɗin.
A ƙarƙashin saitunan tsoho na layin umarni MySQL, ana yin ma'amala ta atomatik, wato, aikin COMMIT za a aiwatar da shi nan da nan bayan an aiwatar da bayanin SQL.Don haka, don buɗe ma'amala a sarari dole ne a yi amfani da umarnin BEGIN ko FARA MULKI, ko aiwatar da umarnin SET AUTOCOMMIT=0, don kashe amfani da ƙaddamarwa ta atomatik don zaman na yanzu.
Bayanin sarrafa ma'amala:
- FARA ko FARA MA'amala; fara ciniki a sarari;
- KYAUTA; Hakanan ana iya amfani da AIKIN YI, amma guda biyu daidai suke. COMMIT yana aiwatar da ma'amala kuma ya sanya duk gyare-gyaren da aka yi zuwa rumbun adana bayanai na dindindin;
- ROLLBACK; yana yiwuwa a yi amfani da ROLLBACK WORK, amma biyun sunyi daidai.Rollback yana ƙare ma'amalar mai amfani kuma yana soke duk gyare-gyaren da ba a yi ba da ke ci gaba;
- Mai gano SAVEPOINT; SAVEPOINT yana ba da damar ƙirƙirar wurin ajiyewa a cikin ma'amala, kuma ana iya samun SAVEPOINT da yawa a cikin ma'amala;
- SAKE GANE SAVEPOINT; share wurin ajiyar ma'amala, lokacin da babu takamaiman wurin ajiyewa, aiwatar da bayanin zai jefa keɓantacce;
- ROLLBACK ZUWA GA ganowa; mayar da ma'amala zuwa batu;
- SET TRANSACTION; yi amfani da shi don saita matakin keɓewar ciniki. Injin ajiya na InnoDB yana ba da matakan keɓance ma'amala na KARATUN KYAUTA, KYAUTA, MAI MAIMAITA KARANTA, da SERIALIZABLE.
Akwai manyan hanyoyi guda biyu na sarrafa ma'amalar MYSQL:
1. Yi amfani da BEGIN, ROLLBACK, COMMIT don cim ma
- GAME fara ciniki
- RUBUTAWA sake dawowa ma'amala
- AIKATA Tabbatar da ciniki
2. Yi amfani da SET kai tsaye don canza yanayin ƙaddamar da kai na MySQL:
- SATA AUTOCOMMIT=0 Kashe ƙaddamarwa ta atomatik
- SATA AUTOCOMMIT=1 Kunna ƙaddamarwa ta atomatik
gwajin ma'amala
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>
Yin amfani da Misalin Ma'amala a cikin PHP
MySQL ORDER TA gwaji:
<? 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/ ) shared "MySQL Database Transaction Rollback Isolation/Bude Concept/Processing Level of PHP Statements", wanda ke taimaka muku.
Barka da zuwa raba hanyar haɗin wannan labarin:https://www.chenweiliang.com/cwl-494.html
Barka da zuwa tashar Telegram na Chen Weiliang's blog don samun sabbin abubuwa!
📚 Wannan jagorar ya ƙunshi ƙima mai yawa, 🌟Wannan dama ce da ba kasafai ba, kar a rasa ta! ⏰⌛💨
Share da like idan kuna so!
Rarraba ku da abubuwan so sune ci gaba da ƙarfafa mu!