Drejtoria e artikujve
Izolimi/aktivizimi i koncepteve/trajtimi i niveleve të rikthimit të transaksioneve në bazën e të dhënave MySQL, deklaratat PHP
MySQL Punët
Transaksionet MySQL përdoren kryesisht për të përpunuar të dhëna me një sasi të madhe operacionesh dhe kompleksitet të lartë.Për shembull, në sistemin e menaxhimit të personelit, nëse fshini një person, duhet të fshini si informacionin bazë të personit ashtu edhe informacionin që lidhet me personin, si kutitë postare, artikujt, etj. Në këtë mënyrë, këto deklarata të funksionimit të bazës së të dhënave përbëjnë një transaksion!
- Transaksionet mbështeten në MySQL vetëm për bazat e të dhënave ose tabelat që përdorin motorin e bazës së të dhënave Innodb.
- Përpunimi i transaksioneve mund të përdoret për të ruajtur integritetin e bazës së të dhënave, duke siguruar që grupet e deklaratave SQL ose të ekzekutohen të gjitha ose asnjë prej tyre nuk është ekzekutuar.
- Transaksionet përdoren për të menaxhuar futjen, përditësimin, fshirjen e deklaratave
Në përgjithësi, një transaksion duhet të plotësojë 4 kushte (ACID): Atomiciteti (atomiciteti), Konsistenca (stabiliteti), Izolimi (izolimi), Qëndrueshmëria (besueshmëria)
- 1,Atomiteti i transaksioneve:Një grup transaksionesh që ose kanë sukses ose tërhiqen.
- 2,stabilitet:Ka të dhëna të paligjshme (kufizimet kryesore të huaja dhe të ngjashme), dhe transaksioni tërhiqet.
- 3,Izolim:Transaksionet zhvillohen në mënyrë të pavarur.Nëse rezultati i një transaksioni ndikon në transaksione të tjera, atëherë transaksionet e tjera do të tërhiqen.Izolimi 100% i transaksioneve në kurriz të shpejtësisë.
- 4,besueshmëria:Pas dështimit të softuerit dhe harduerit, drejtuesi i tabelës së të dhënave InnoDB do të përdorë skedarin e regjistrit për ta rindërtuar dhe modifikuar atë.Besueshmëria dhe shpejtësia e lartë nuk mund t'i kenë të dyja, opsioni innodb_flush_log_at_trx_commit përcakton se kur të ruhen transaksionet në regjistër.
Sipas cilësimeve të paracaktuara të linjës së komandës MySQL, transaksionet kryhen automatikisht, domethënë, operacioni COMMIT do të ekzekutohet menjëherë pasi të ekzekutohet deklarata SQL.Prandaj, për të hapur në mënyrë eksplicite një transaksion duhet të përdorni komandën BEGIN ose START TRANSACTION, ose të ekzekutoni komandën SET AUTOCOMMIT=0, për të çaktivizuar përdorimin e kryerjes automatike për sesionin aktual.
Deklarata e kontrollit të transaksionit:
- FILLO ose FILLO TRANSAKSIONIN; nis në mënyrë eksplicite një transaksion;
- COMMIT; COMMI WORK mund të përdoret gjithashtu, por të dyja janë ekuivalente. COMMIT kryen transaksionin dhe i bën të përhershme të gjitha modifikimet e bëra në bazën e të dhënave;
- ROLLBACK; është e mundur të përdoret ROLLBACK WORK, por të dyja janë ekuivalente.Rikthimi përfundon transaksionin e përdoruesit dhe anulon çdo modifikim të paangazhuar në vazhdim;
- Identifikuesi SAVEPOINT; SAVEPOINT lejon krijimin e një pike ruajtëse në një transaksion dhe mund të ketë shumë SAVEPOINT në një transaksion;
- LIRON identifikuesin SAVEPOINT, fshini një pikë ruajtjeje të një transaksioni, kur nuk ka një pikë të caktuar ruajtjeje, ekzekutimi i deklaratës do të sjellë një përjashtim;
- ROLLBACK TO identifikues, ktheje transaksionin në pikën;
- SET TRANSACTION; përdoret për të vendosur nivelin e izolimit të transaksionit. Motori i ruajtjes InnoDB ofron nivele të izolimit të transaksioneve të LEXUARA TË PAKONSUAR, LEXUAR TË PËRGJESHTAR, LEXUAR TË PËRSËRITSHËM dhe SERIALIZueshëm.
Ekzistojnë dy metoda kryesore të përpunimit të transaksioneve MYSQL:
1. Përdorni BEGIN, ROLLBACK, COMMIT për të arritur
- BEGIN filloni një transaksion
- KTHIMI rikthimi i transaksionit
- BëJ BASHK konfirmimi i transaksionit
2. Përdor direkt SET për të ndryshuar modalitetin e kryerjes automatike të MySQL:
- SET AUTOKOMMIT=0 Çaktivizo kryerjen automatike
- SET AUTOKOMMIT=1 Aktivizo kryerjen automatike
testi i transaksionit
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>
Përdorimi i instancave të transaksioneve në 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);
?>Shpresojmë që artikulli "Izolimi i Transaksioneve të Bazës së të Dhënave MySQL/Aktivizimi i Koncepteve/Përpunimi i Deklaratave PHP të Përpunimit të Nivelit" i ndarë në blogun e Chen Weiliang ( https://www.chenweiliang.com/ ) do t'ju jetë i dobishëm.
Ndihuni të lirë të ndani lidhjen e këtij artikulli: https://www.chenweiliang.com/cwl-494.html
