Saraka ya Nakala
Hifadhidata ya MySQLUtengaji wa urejeshaji wa muamala/dhana wazi/taarifa ya usindikaji wa kiwango cha php
MySQL Mambo
Shughuli za MySQL hutumiwa hasa kuchakata data na idadi kubwa ya shughuli na utata wa juu.Kwa mfano, katika mfumo wa usimamizi wa wafanyakazi, ukifuta mtu, unahitaji kufuta taarifa zote za msingi za mtu na taarifa zinazohusiana na mtu, kama vile sanduku za barua, makala, nk. Kwa njia hii, taarifa hizi za uendeshaji wa hifadhidata. tengeneza shughuli!
- Shughuli za malipo zinatumika katika MySQL pekee kwa hifadhidata au jedwali zinazotumia injini ya hifadhidata ya Innodb.
- Uchakataji wa muamala unaweza kutumika kudumisha uadilifu wa hifadhidata, kuhakikisha kuwa bechi za taarifa za SQL zinatekelezwa zote au hakuna hata moja kati ya hizo inayotekelezwa.
- Shughuli za malipo hutumika kudhibiti kuingiza, kusasisha, kufuta taarifa
Kwa ujumla, muamala lazima utimize masharti 4 (ACID): Atomia (atomicity), Uthabiti (uthabiti), Kutengwa (kutengwa), Kudumu (kutegemewa)
- 1,Atomicity ya shughuli:Seti ya miamala ambayo ama itafaulu au itaondolewa.
- 2,utulivu:Kuna data haramu (vizuizi vya ufunguo wa kigeni na mengineyo), na muamala umeondolewa.
- 3,Kujitenga:Shughuli zinaendeshwa kwa kujitegemea.Ikiwa matokeo ya muamala yataathiri shughuli zingine, basi miamala mingine itaondolewa.100% kutengwa kwa shughuli kwa gharama ya kasi.
- 4,kutegemewa:Baada ya ajali ya programu na maunzi, kiendeshi cha jedwali la data la InnoDB kitatumia faili ya kumbukumbu ili kuijenga upya na kuirekebisha.Kuegemea na kasi ya juu haziwezi kuwa na zote mbili, chaguo la innodb_flush_log_at_trx_commit huamua wakati wa kuhifadhi miamala kwenye logi.
Chini ya mipangilio ya msingi ya mstari wa amri ya MySQL, shughuli zinafanywa moja kwa moja, yaani, operesheni ya COMMIT itatekelezwa mara moja baada ya taarifa ya SQL kutekelezwa.Kwa hivyo, ili kufungua muamala waziwazi ni lazima utumie amri ANZA au ANZA TRANSACTION, au utekeleze amri SET AUTOCOMMIT=0, kuzima matumizi ya ahadi otomatiki kwa kipindi cha sasa.
Taarifa ya udhibiti wa shughuli:
- ANZA au ANZA SHUGHULI; anzisha muamala waziwazi;
- JITOE; FANYA KAZI pia inaweza kutumika, lakini zote mbili ni sawa. COMMIT hufanya shughuli na kufanya marekebisho yote yaliyofanywa kwenye hifadhidata kuwa ya kudumu;
- ROLLBACK; inawezekana kutumia ROLLBACK WORK, lakini zote mbili ni sawa.Urejeshaji nyuma humaliza shughuli ya mtumiaji na kutengua marekebisho yote ambayo hayajatekelezwa;
- Kitambulisho cha SAVEPOINT; SAVEPOINT inaruhusu kuunda sehemu ya kuhifadhi katika muamala, na kunaweza kuwa na SAVEPOINT nyingi katika muamala;
- TOA kitambulisho cha SAVEPOINT; futa sehemu ya kuhifadhi ya muamala, wakati hakuna sehemu maalum ya kuhifadhi, kutekeleza taarifa hiyo kutatupa ubaguzi;
- RUDISHA kwa kitambulisho, rudisha muamala hadi kwenye uhakika;
- WEKA TRANSASATION; hutumika kuweka kiwango cha kutengwa cha muamala. Injini ya hifadhi ya InnoDB hutoa viwango vya kutengwa vya muamala vya KUSOMA HAKUNA KUJITOA, KUSOMA UMEJITUMA, KURUDIA KUSOMA na SERIALIZABLE.
Kuna njia mbili kuu za usindikaji wa muamala wa MYSQL:
1. Tumia ANZA, ROLLBACK, COMMIT kufikia
- BEGIN kuanza shughuli
- RUSHWA urejeshaji wa shughuli
- TAMISEMI Uthibitisho wa muamala
2. Tumia SET moja kwa moja kubadilisha hali ya kujitolea kiotomatiki ya MySQL:
- WEKA COMMIT Otomatiki=0 Lemaza kujitolea kiotomatiki
- WEKA COMMIT Otomatiki=1 Washa ahadi ya kiotomatiki
mtihani wa shughuli
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>
Kutumia Matukio ya Muamala katika PHP
MySQL ORDER BY mtihani:
<? 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/ ) ilishirikiwa "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", ambayo ni ya manufaa kwako.
Karibu kushiriki kiungo cha makala hii:https://www.chenweiliang.com/cwl-494.html
Karibu kwenye chaneli ya Telegramu ya blogu ya Chen Weiliang ili kupata masasisho mapya zaidi!
📚 Mwongozo huu una thamani kubwa, 🌟Hii ni fursa adimu, usiikose! ⏰⌛💨
Share na like ukipenda!
Kushiriki kwako na kupenda kwako ndio motisha yetu inayoendelea!