Straipsnių katalogas
MySQL duomenų bazėSandorio atšaukimo išskyrimas / atvira koncepcija / apdorojimo lygis php pareiškimas
MySQL Reikalai
MySQL operacijos daugiausia naudojamos apdoroti duomenis, atliekančius daug operacijų ir labai sudėtingus.Pavyzdžiui, personalo valdymo sistemoje, jei ištrinate asmenį, reikia ištrinti ir pagrindinę asmens informaciją, ir su asmeniu susijusią informaciją, pvz., pašto dėžutes, straipsnius ir kt. Tokiu būdu šie duomenų bazės veikimo teiginiai sudaryti sandorį!
- „MySQL“ palaikomos tik duomenų bazės arba lentelės, kuriose naudojamas „Innodb“ duomenų bazės variklis.
- Operacijų apdorojimas gali būti naudojamas siekiant išlaikyti duomenų bazės vientisumą ir užtikrinti, kad būtų vykdomos visos SQL sakinių paketai arba nevykdomas nė vienas iš jų.
- Operacijos naudojamos ataskaitoms įterpti, atnaujinti, ištrinti
Paprastai tariant, sandoris turi atitikti 4 sąlygas (ACID): atomiškumas (atomiškumas), nuoseklumas (stabilumas), izoliacija (izoliacija), ilgaamžiškumas (patikimumas).
- 1,Sandorių atomiškumas:Operacijų, kurios sėkmingos arba atšauktos, rinkinys.
- 2,stabilumas:Yra neteisėtų duomenų (užsienio raktų apribojimai ir panašiai), ir sandoris atšaukiamas.
- 3,Isolation:Sandoriai vykdomi savarankiškai.Jei operacijos rezultatas paveiks kitus sandorius, kiti sandoriai bus atšaukti.100% operacijų izoliacija greičio sąskaita.
- 4,patikimumas:Po programinės įrangos ir aparatinės įrangos gedimo InnoDB duomenų lentelės tvarkyklė naudos žurnalo failą, kad jį atkurtų ir pakeistų.Patikimumas ir didelė sparta negali turėti abiejų, parinktis innodb_flush_log_at_trx_commit nustato, kada išsaugoti operacijas žurnale.
Pagal numatytuosius MySQL komandų eilutės nustatymus operacijos atliekamos automatiškai, ty operacija COMMIT bus vykdoma iš karto po SQL sakinio vykdymo.Todėl, norint aiškiai atidaryti operaciją, reikia naudoti komandą BEGIN arba START TRANSACTION arba vykdyti komandą SET AUTOCOMMIT=0, kad išjungtumėte automatinio patvirtinimo naudojimą dabartinei sesijai.
Sandorių kontrolės pareiškimas:
- PRADĖTI arba PRADĖTI SANDORIĄ; aiškiai pradėti operaciją;
- COMMIT; COMMIT WORK taip pat gali būti naudojamas, tačiau abu yra lygiaverčiai. COMMIT įpareigoja operaciją ir padaro visus duomenų bazės pakeitimus nuolatiniais;
- ROLLBACK; galima naudoti ROLLBACK WORK, bet abu yra lygiaverčiai.Atšaukimas baigia vartotojo operaciją ir anuliuoja visus vykdomus neįsipareigojimus pakeitimus;
- SAVEPOINT identifikatorius; SAVEPOINT leidžia sukurti išsaugojimo tašką operacijoje, o operacijoje gali būti keli SAVEPOINT;
- RELEASE SAVEPOINT identifikatorius, ištrinkite operacijos išsaugojimo tašką, kai nenurodytas išsaugojimo taškas, vykdydamas pareiškimą išmes išimtį;
- ROLLBACK TO identifikatorius, grąžinti operaciją į tašką;
- SET TRANSACTION; naudojamas operacijos izoliacijos lygiui nustatyti. „InnoDB“ saugojimo variklio teikiami operacijų izoliavimo lygiai yra READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ ir SERIALIZABLE.
Yra du pagrindiniai MYSQL operacijų apdorojimo būdai:
1. Norėdami pasiekti, naudokite BEGIN, ROLLBACK, COMMIT
- BEGIN pradėti sandorį
- ATMINTI sandorio atšaukimas
- ĮSIPAREIGOTI Sandorio patvirtinimas
2. Tiesiogiai naudokite SET, kad pakeistumėte MySQL automatinio patvirtinimo režimą:
- NUSTATYTI AUTOMATINIS ĮSTATYMAS = 0 Išjungti automatinį patvirtinimą
- NUSTATYTI AUTOMATINIS ĮSTATYMAS = 1 Įjunkite automatinį patvirtinimą
sandorio testas
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>
Operacijų atvejų naudojimas PHP
MySQL ORDER BY testas:
<?
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 tinklaraštis ( https://www.chenweiliang.com/ ) pasidalino „MySQL duomenų bazės operacijų grąžinimo izoliacija / atvira koncepcija / PHP pareiškimų apdorojimas lygiu“, kuri jums naudinga.
Kviečiame pasidalinti šio straipsnio nuoroda:https://www.chenweiliang.com/cwl-494.html
Norėdami atskleisti daugiau paslėptų triukų🔑, prisijunkite prie mūsų „Telegram“ kanalo!
Dalinkitės ir like jei patiko! Jūsų pasidalinimai ir mygtukai „Patinka“ yra mūsų nuolatinė motyvacija!