Articulu Directory
basa di dati MySQLTransazzione rollback isolamentu / cuncettu apertu / prucessu di livellu php dichjarazione
MySQL Affari
I transazzioni MySQL sò principalmente utilizati per processà e dati cù una grande quantità di operazioni è alta cumplessità.Per esempiu, in u sistema di gestione di u persunale, se sguassate una persona, avete bisognu di sguassà l'infurmazioni basi di a persona è l'infurmazioni relative à a persona, cum'è mailbox, articuli, etc. custituisce una transazzione!
- E transazzioni sò supportati in MySQL solu per basa di dati o tavule chì utilizanu u mutore di basa di dati Innodb.
- U prucessu di transazzione pò esse usatu per mantene l'integrità di a basa di dati, assicurendu chì i batch di dichjarazioni SQL sò o tutti eseguiti o nimu d'elli sò eseguiti.
- E transazzione sò aduprate per gestisce inserisce, aghjurnà, sguassà dichjarazioni
In generale, una transazzione deve risponde à 4 cundizioni (ACID): Atomicità (atomicità), Cuerenza (stabilità), Isolamentu (isolamentu), Durabilità (affidabilità)
- 1,Atomicità di e transazzione:Un inseme di transazzione chì o riesce o si ritira.
- 2,stabilità:Ci hè dati illegale (costrizzione chjave straniera è simili), è a transazzione hè ritirata.
- 3,Isulamentu:E transazzioni sò in modu indipendenti.Se u risultatu di una transazzione afecta à altre transazzione, allora altre transazzione seranu ritirate.100% isolamentu di e transazzione à a spesa di a rapidità.
- 4,affidabilità:Dopu à u crash di software è hardware, u driver di a tabella di dati InnoDB aduprà u schedariu di log per ricustruisce è mudificà.L'affidabilità è l'alta velocità ùn pò micca avè i dui, l'opzione innodb_flush_log_at_trx_commit determina quandu salvà e transazzione in u log.
Sottu i paràmetri predeterminati di a linea di cumanda MySQL, e transazzione sò automaticamente impegnati, vale à dì, l'operazione COMMIT serà eseguita immediatamente dopu chì a dichjarazione SQL hè eseguita.Per quessa, per apre esplicitamente una transazzione deve aduprà u cumandimu BEGIN o START TRANSACTION, o eseguisce u cumandimu SET AUTOCOMMIT = 0, per disattivà l'usu di l'impegnu automaticu per a sessione attuale.
Dichjarazione di cuntrollu di transazzione:
- BEGIN or START TRANSACTION; principià esplicitamente una transazzione;
- COMMIT; COMMIT WORK pò ancu esse usatu, ma i dui sò equivalenti. COMMIT impegna a transazzione è rende permanente tutte e mudificazioni fatte à a basa di dati;
- ROLLBACK; hè pussibule aduprà ROLLBACK WORK, ma i dui sò equivalenti.U rollback finisce a transazzione di l'utilizatore è annulla tutte e mudificazioni senza impegni in corso;
- SAVEPOINT identificatore; SAVEPOINT permette di creà un puntu di salvezza in una transazzione, è pò esse parechje SAVEPOINT in una transazzione;
- RELEASE SAVEPOINT identificatore; sguassate un puntu di salvezza di una transazzione, quandu ùn ci hè micca un puntu di salvezza specificatu, eseguisce a dichjarazione lancerà una eccezzioni;
- ROLLBACK TO identificatore; retrocede a transazzione à u puntu;
- SET TRANSACTION; usatu per stabilisce u livellu di isolamentu di a transazzione. U mutore di almacenamiento InnoDB furnisce livelli di isolamentu di transazzione di READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, è SERIALIZABLE.
Ci hè dui metudi principali di trasfurmazioni di transazzione MYSQL:
1. Aduprate BEGIN, ROLLBACK, COMMIT per ottene
- PRINCIPIA principià una transazzione
- ROLLE IN RETRO rollback di transazzione
- IMPUGNÀ A cunferma di a transazzione
2. Aduprate SET direttamente per cambià u modu d'autocommit di MySQL:
- SETAUTOCOMMIT=0 Disattivà l'autocommit
- SETAUTOCOMMIT=1 Accende l'autocommit
prova di transazzione
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>
Utilizà l'istanze di transazzione in 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); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) hà spartutu "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", chì hè utile per voi.
Benvenuti à sparte u ligame di stu articulu:https://www.chenweiliang.com/cwl-494.html
Benvenuti à u canali Telegram di u blog di Chen Weiliang per avè l'ultime aghjurnamenti!
📚 Questa guida cuntene un valore enormu, 🌟Questa hè una rara opportunità, ùn mancate micca! ⏰⌛💨
Condividi è mi piace se ti piace!
A vostra spartera è Mi piace sò a nostra motivazione cuntinua!