Cikkkönyvtár
MySQL adatbázisTranzakció visszagörgetési elkülönítése/nyílt koncepció/szintű feldolgozás php utasítás
MySQL Ügyek
A MySQL-tranzakciókat főként nagy mennyiségű és összetett adatok feldolgozására használják.Például a személyzeti menedzsment rendszerben, ha töröl egy személyt, akkor mind a személy alapvető adatait, mind a személyhez kapcsolódó információkat, például postafiókokat, cikkeket stb. tranzakciót képez!
- A tranzakciókat a MySQL csak az Innodb adatbázismotort használó adatbázisok vagy táblák esetében támogatja.
- A tranzakciófeldolgozás felhasználható az adatbázis integritásának megőrzésére, biztosítva, hogy az SQL-utasítások kötegei vagy mind végrehajtásra kerüljenek, vagy egyiket se hajtsák végre.
- A tranzakciók a beszúrási, frissítési és törlési utasítások kezelésére szolgálnak
Általánosságban elmondható, hogy egy tranzakciónak 4 feltételnek kell megfelelnie (ACID): atomitás (atomosság), konzisztencia (stabilitás), izoláció (izoláció), tartósság (megbízhatóság)
- 1,A tranzakciók atomitása:A sikeres vagy visszavont tranzakciók halmaza.
- 2,stabilitás:Illegális adatok vannak (külföldi kulcsok megszorítása és hasonlók), és a tranzakció visszavonásra kerül.
- 3,Elkülönítés:A tranzakciók önállóan futnak.Ha egy tranzakció eredménye más tranzakciókat is érint, akkor a többi tranzakció visszavonásra kerül.A tranzakciók 100%-os elkülönítése a sebesség rovására.
- 4,megbízhatóság:A szoftver és a hardver összeomlása után az InnoDB adattábla illesztőprogramja a naplófájl segítségével rekonstruálja és módosítja azt.A megbízhatóság és a nagy sebesség nem tartalmazhatja mindkettőt, az innodb_flush_log_at_trx_commit beállítás határozza meg, hogy mikor kell menteni a tranzakciókat a naplóba.
A MySQL parancssor alapértelmezett beállításai szerint a tranzakciók automatikusan véglegesítésre kerülnek, azaz a COMMIT művelet az SQL utasítás végrehajtása után azonnal végrehajtásra kerül.Ezért egy tranzakció kifejezett megnyitásához használja a BEGIN vagy START TRANSACTION parancsot, vagy hajtsa végre a SET AUTOCOMMIT=0 parancsot, hogy letiltja az automatikus véglegesítés használatát az aktuális munkamenetre.
Tranzakcióellenőrzési nyilatkozat:
- TRANSACTION INDÍTÁSA vagy INDÍTÁSA; kifejezetten elindít egy tranzakciót;
- COMMIT; COMMIT WORK is használható, de a kettő egyenértékű. A COMMIT véglegesíti a tranzakciót, és véglegessé teszi az adatbázisban végrehajtott összes módosítást;
- ROLLBACK; lehetséges a ROLLBACK WORK használata, de a kettő egyenértékű.A visszaállítás befejezi a felhasználó tranzakcióját, és visszavon minden folyamatban lévő, nem véglegesített módosítást;
- SAVEPOINT azonosító; A SAVEPOINT lehetővé teszi mentési pont létrehozását egy tranzakcióban, és több SAVEPOINT is lehet egy tranzakcióban;
- RELEASE SAVEPOINT azonosító; egy tranzakció mentési pontjának törlése, ha nincs megadott mentési pont, az utasítás végrehajtása kivételt dob;
- ROLLBACK TO azonosító, a tranzakció visszaállítása a pontig;
- TRANSACTION BEÁLLÍTÁSA; a tranzakció elkülönítési szintjének beállítására szolgál. Az InnoDB tárolómotor a READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ és SERIALIZABLE tranzakciós elkülönítési szinteket biztosítja.
A MYSQL tranzakciók feldolgozásának két fő módszere van:
1. Használja a BEGIN, ROLLBACK, COMMIT gombot az eléréshez
- KEZDŐDIK tranzakciót indítani
- VISSZATÉRÉS tranzakció visszaállítása
- ELKÖVETNI Tranzakció megerősítése
2. A SET segítségével közvetlenül módosíthatja a MySQL automatikus véglegesítési módját:
- SETAUTOCOMMIT=0 Az automatikus véglegesítés letiltása
- SETAUTOCOMMIT=1 Kapcsolja be az automatikus véglegesítést
tranzakciós teszt
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>
A tranzakciós példányok használata PHP-ben
MySQL ORDER BY teszt:
<? 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/ ) megosztotta a „MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements”, ami hasznos az Ön számára.
Üdvözöljük a cikk linkjének megosztásában:https://www.chenweiliang.com/cwl-494.html
Üdvözöljük Chen Weiliang blogjának Telegram csatornáján, hogy értesüljön a legfrissebb hírekről!
📚 Ez az útmutató hatalmas értéket tartalmaz, 🌟 Ritka lehetőség ez, ne hagyd ki! ⏰⌛💨
Oszd meg és lájkold, ha tetszik!
Az Ön megosztása és lájkja folyamatos motivációnk!