Tusaha Maqaalka
database MySQLGo'doominta dib-u-celinta macaamilka / fikradda furan/ bayaanada php ee heerka habaynta
MySQL Arimaha
Wax kala iibsiga MySQL waxaa inta badan loo isticmaalaa in lagu farsameeyo xogta leh hawlo badan iyo kakanaanta sare.Tusaale ahaan, nidaamka maamulka shaqaalaha, haddii aad qof tirtirto, waxaad u baahan tahay inaad tirtirto labadaba xogta aasaasiga ah ee qofka iyo macluumaadka la xidhiidha qofka, sida sanduuqyada boostada, maqaallada, iwm. waxay ka dhigan tahay macaamil ganacsi!
- Wax kala iibsiga waxaa lagu taageeraa MySQL oo keliya xog ururinta ama miisaska isticmaala injiinka xogta Innodb.
- Habaynta wax kala iibsiga waxa loo isticmaali karaa in lagu ilaaliyo daacadnimada xogta xogta, iyada oo la hubinayo in dufcadaha weedhaha SQL la wada fuliyo ama aan midkoodna la fulin.
- Macaamilada waxaa loo isticmaalaa in lagu maareeyo gelinta, cusboonaysiinta, tirtiridda bayaanada
Guud ahaan, macaamil ganacsigu waa inuu buuxiyaa 4 shuruudood (ACID): Atomicity (atomicity), Joogto (xasillooni), Go'doomin (go'doon), Waarta (isku-kalsoonaan)
- 1,Atomity ee wax kala iibsiga:Wax kala iibsiga oo ama guulaysta ama ka noqda
- 2,xasilloonida:Waxaa jira xog sharci darro ah (caqabadaha muhiimka ah ee ajnabiga ah iyo wixii la mid ah), macaamilkiina waa laga noqday.
- 3,Karantiil:Macaamilyadu waxay u socdaan si madaxbannaan.Haddii natiijada wax kala iibsiga ay saamayso wax kala iibsiga, markaas wax kala beddelashada kale waa laga noqon doonaa.100% go'doominta wax kala iibsiga ee kharashka xawaaraha.
- 4,isku halaynta:Kadib shilka software-ka iyo qalabka, darawalka miiska xogta InnoDB wuxuu isticmaali doonaa faylka log si uu dib ugu dhiso oo wax uga bedelo.Isku halaynta iyo xawaaraha sare labadaba ma yeelan karaan, doorashada innodb_flush_log_at_trx_commit ayaa go'aamisa goorta la kaydinayo wax kala iibsiga log.
Marka la eego goobaha caadiga ah ee khadka taliska MySQL, macaamilada si toos ah ayaa loo go'aamiyaa, taas oo ah, hawlgalka COMMIT waxa la fulin doonaa isla markaaba ka dib marka bayaanka SQL la fuliyo.Sidaa darteed, si aad si cad u furto wax kala iibsiga waa in ay isticmaashaa amarka BEGIN ama BILAASHKA GANACSIGA, ama fulinta amarka SET AUTOCOMMIT=0, si aad u joojiso isticmaalka si toos ah u go'aaminta fadhiga hadda.
Bayaanka xakamaynta wax kala iibsiga:
- Bilow ama biloow wax kala iibsiga; si cad u bilow wax kala iibsiga;
- GUDBINTA; SHAQO GALIN sidoo kale waa la isticmaali karaa, laakiin labaduba waa u dhigma. COMMIT waxa ay samaysaa wax kala iibsiga oo waxa ay ka dhigtaa dhammaan wax ka beddelka lagu sameeyey kaydka xogta mid joogto ah;
- ROLLBACK; waa suurtogal in la isticmaalo ROLLBACK WORK, laakiin labaduba waa u dhigma.Dib-u-celinta waxay soo afjartaa wax kala iibsiga adeegsadaha oo waxay burinaysaa dhammaan isbeddellada aan la go'aamin ee socda;
- Aqoonsiga SAVEPOINT, SAVEPOINT waxa ay ogolaataa in ay abuurto meel kayd ah wax kala iibsiga, waxaana jiri kara kayd badan oo wax kala iibsiga ah;
- SII dayn aqoonsiga kaydinta, tirtir barta kaydinta wax kala iibsiga, marka aanay jirin meel kayd ah oo cayiman, fulinta bayaanku waxay tuurayaan ka reebis;
- Dib-u-soo-celinta aqoonsiga; dib ugu celi wax kala iibsiga ilaa barta;
- SET TRANSACTION; loo isticmaalo in lagu dejiyo heerka go'doominta ee wax kala iibsiga. Heerarka go'doominta wax kala iibsiga ee uu bixiyo mishiinka kaydinta InnoDB waa AKHRISO AAN LAGU QABTAYN, AKHRISO, LAGU SOO NOQON KARO, iyo SERIALIZABLE.
Waxaa jira laba hab oo waaweyn oo wax kala beddelashada MYSQL:
1. Adeegso BEGIN, ROLLBACK, GO'AAN si aad u gaadho
- BEGIN bilow ganacsi
- Dib u celi dib-u-celinta wax kala iibsiga
- GAL Xaqiijinta macaamilka
2. Si toos ah u isticmaal SET si aad u bedesho habka iswada ee MySQL:
- SETAUTOCOMMIT=0 Jooji is-goynta
- SETAUTOCOMMIT=1 Daar go'aan toos ah
imtixaanka macaamil ganacsi
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>
Isticmaalka Tusaalooyinka wax kala iibsiga ee PHP
Amarka MySQL ee tijaabada:
<?
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/ ) la wadaagay "MySQL Database Transaction Rollback Go'doon/Fikrad Furan/Heerka Habaynta ee Bayaanada PHP", kaas oo adiga ku caawinaya.
Ku soo dhawoow inaad wadaagto xiriirka maqaalkan:https://www.chenweiliang.com/cwl-494.html
Si aad u furto khiyaamo qarsoon🔑, ku soo biir kanaalkayaga Telegram!
Share iyo like haddi aad ka heshay! Saamiyadaada iyo waxa aad jeceshahay ayaa ah dhiirigelintayada sii socota!