Artiklite kataloog
MySQL andmebaasTehingu tagasipööramise isoleerimine/avatud kontseptsioon/taseme töötlemise php-avaldus
MySQL Asjaajamine
MySQL-i tehinguid kasutatakse peamiselt suure operatsioonimahu ja suure keerukusega andmete töötlemiseks.Näiteks personalihaldussüsteemis tuleb isiku kustutamisel kustutada nii isiku põhiandmed kui ka temaga seotud andmed nagu postkastid, artiklid jms. moodustavad tehingu!
- MySQL-is toetatakse tehinguid ainult nende andmebaaside või tabelite puhul, mis kasutavad Innodb andmebaasimootorit.
- Andmebaasi terviklikkuse säilitamiseks saab kasutada tehingute töötlemist, tagades, et kõik SQL-lausete partiid täidetakse või mitte ühtegi neist ei täideta.
- Tehinguid kasutatakse väljavõtete lisamise, värskendamise ja kustutamise haldamiseks
Üldiselt peavad tehingud vastama neljale tingimusele (ACID): Aatomilisus (aatomilisus), järjepidevus (stabiilsus), isoleeritus (isolatsioon), vastupidavus (usaldusväärsus)
- 1,Tehingute tuumalisus:Tehingute komplekt, mis kas õnnestuvad või tühistatakse.
- 2,stabiilsus:Seal on ebaseaduslikud andmed (võõrvõtmepiirangud jms) ja tehing võetakse tagasi.
- 3,Isolatsioon:Tehingud toimuvad iseseisvalt.Kui tehingu tulemus mõjutab teisi tehinguid, siis teised tehingud tühistatakse.100% tehingute eraldatus kiiruse arvelt.
- 4,usaldusväärsus:Pärast tarkvara ja riistvara krahhi kasutab InnoDB andmetabeli draiver logifaili selle rekonstrueerimiseks ja muutmiseks.Usaldusväärsusel ja suurel kiirusel ei saa olla mõlemat, suvand innodb_flush_log_at_trx_commit määrab, millal tehingud logisse salvestada.
MySQL-i käsurea vaikesätete kohaselt seotakse tehingud automaatselt, see tähendab, et operatsioon COMMIT käivitatakse kohe pärast SQL-lause täitmist.Seetõttu tuleb tehingu selgesõnaliseks avamiseks kasutada käsku BEGIN või START TRANSACTION või käivitada käsk SET AUTOCOMMIT=0, et keelata praeguse seansi automaatse kinnitamise kasutamine.
Tehingu kontrolli avaldus:
- TEHINGU ALUSTAMINE või ALUSTAMINE; tehingu selgesõnaline alustamine;
- COMMIT; COMMIT WORK võib kasutada ka, kuid need kaks on samaväärsed. COMMIT sooritab tehingu ja muudab kõik andmebaasis tehtud muudatused püsivaks;
- ROLLBACK; on võimalik kasutada ROLLBACK WORKi, kuid need kaks on samaväärsed.Tagasivõtmine lõpetab kasutaja tehingu ja tühistab kõik pooleliolevad muudatused;
- SAVEPOINT-i identifikaator, SAVEPOINT võimaldab luua tehingus salvestuspunkti ja tehingus võib olla mitu SAVEPOINT-i;
- RELEASE SAVEPOINT ID, kustutage tehingu salvestuspunkt, kui määratud salvestuspunkti pole, loob avalduse täitmine erandi;
- ROLLBACK TO Identifier, tagasipööramine tehingu punktini;
- SET TRANACTION; kasutatakse tehingu isolatsioonitaseme määramiseks. InnoDB salvestusmootor pakub tehingute isolatsioonitasemeid READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ ja SERIALIZABLE.
MYSQL-i tehingute töötlemiseks on kaks peamist meetodit:
1. Kasutage saavutamiseks BEGIN, ROLLBACK, COMMIT
- BEGIN alustada tehingut
- TAGASI tehingu tagasivõtmine
- KOHUSTUS Tehingu kinnitus
2. Kasutage MySQL-i automaatse kinnitamise režiimi muutmiseks otse SET:
- SETAUTOCOMMIT=0 Keela automaatne kinnitamine
- SETAUTOCOMMIT=1 Lülitage automaatne kinnitamine sisse
tehingu test
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>
Tehingujuhtumite kasutamine PHP-s
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); ?>
Hope Chen Weiliangi ajaveeb ( https://www.chenweiliang.com/ ) jagatud "MySQL Database Transaction Rollback Isolation / Open Concept / Level Processing of PHP Statements", mis on teile abiks.
Tere tulemast selle artikli linki jagama:https://www.chenweiliang.com/cwl-494.html
Tere tulemast Chen Weiliangi ajaveebi Telegrami kanalile, et saada uusimaid värskendusi!
📚 See juhend sisaldab tohutut väärtust, 🌟See on harukordne võimalus, ärge jätke seda kasutamata! ⏰⌛💨
Jaga ja like kui meeldib!
Teie jagamine ja meeldimised on meie pidev motivatsioon!