Directori d'articles
Base de dades MySQLDeclaració php d'aïllament/concepte obert/processament de nivell de transacció de retrocés
MySQL Afers
Les transaccions MySQL s'utilitzen principalment per processar dades amb una gran quantitat d'operacions i una gran complexitat.Per exemple, en el sistema de gestió de personal, si suprimiu una persona, heu d'eliminar tant la informació bàsica de la persona com la informació relacionada amb la persona, com ara bústies, articles, etc. D'aquesta manera, aquestes declaracions d'operació de la base de dades constitueix una transacció!
- Les transaccions només s'admeten a MySQL per a bases de dades o taules que utilitzen el motor de bases de dades Innodb.
- El processament de transaccions es pot utilitzar per mantenir la integritat de la base de dades, assegurant que els lots de sentències SQL s'executen o no s'executi cap.
- Les transaccions s'utilitzen per gestionar la inserció, l'actualització i la supressió dels extractes
En termes generals, una transacció ha de complir 4 condicions (ÀCID): Atomicitat (atomicitat), consistència (estabilitat), aïllament (aïllament), durabilitat (fiabilitat)
- 1,Atomicitat de les transaccions:Conjunt de transaccions que tenen èxit o es retiren.
- 2,estabilitat:Hi ha dades il·legals (restriccions de clau estrangera i similars) i la transacció es retira.
- 3,Aïllament:Les transaccions es realitzen de manera independent.Si el resultat d'una transacció afecta altres transaccions, es retiraran altres transaccions.Aïllament al 100% de les transaccions, que requereix sacrificar la velocitat.
- 4,fiabilitat:Després de l'error de programari i maquinari, el controlador de la taula de dades InnoDB utilitzarà el fitxer de registre per reconstruir-lo i modificar-lo.La fiabilitat i l'alta velocitat no poden tenir totes dues, l'opció innodb_flush_log_at_trx_commit determina quan s'han de desar les transaccions al registre.
Sota la configuració predeterminada de la línia d'ordres de MySQL, les transaccions es comprometen automàticament, és a dir, l'operació COMMIT s'executarà immediatament després d'executar la instrucció SQL.Per tant, per obrir explícitament una transacció s'ha d'utilitzar l'ordre BEGIN o START TRANSACTION, o executar l'ordre SET AUTOCOMMIT=0, per desactivar l'ús de la confirmació automàtica per a la sessió actual.
Declaració de control de transaccions:
- COMENÇAR o INICIAR LA TRANSACCIÓ; iniciar explícitament una transacció;
- COMMIT; COMMIT WORK també es pot utilitzar, però els dos són equivalents. COMMIT confirma la transacció i fa permanents totes les modificacions fetes a la base de dades;
- ROLLBACK; és possible utilitzar ROLLBACK WORK, però els dos són equivalents.Rollback finalitza la transacció de l'usuari i desfà totes les modificacions no compromeses en curs;
- SAVEPOINT identificador; SAVEPOINT permet crear un punt de salvament en una transacció, i hi pot haver diversos SAVEPOINTs en una transacció;
- RELEASE SAVEPOINT identificador; suprimiu un punt de salvament d'una transacció, quan no hi ha cap punt de guarda especificat, l'execució de la instrucció generarà una excepció;
- ROLLBACK TO identificador; retrocedeix la transacció al punt;
- SET TRANSACTION; s'utilitza per establir el nivell d'aïllament de la transacció. El motor d'emmagatzematge InnoDB proporciona nivells d'aïllament de transaccions de LECTURA SIN COMPROMÈS, LECTURA COMPROMESSA, LECTURA REPETIBLE i SERIALIZABLE.
Hi ha dos mètodes principals de processament de transaccions MYSQL:
1. Utilitzeu BEGIN, ROLLBACK, COMMIT per aconseguir
- Començar iniciar una transacció
- RECOLLIDA retrocés de transacció
- COMPROMETRE’s Confirmació de la transacció
2. Utilitzeu SET directament per canviar el mode de confirmació automàtica de MySQL:
- SETAUTOCOMMIT=0 Desactiva la confirmació automàtica
- SETAUTOCOMMIT=1 Activa la confirmació automàtica
prova de transacció
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>
Ús d'instàncies de transacció en PHP
MySQL ORDENA PER prova:
<? 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); ?>
Bloc d'Hope Chen Weiliang ( https://www.chenweiliang.com/ ) ha compartit "Aïllament de retrocés de transaccions de la base de dades MySQL/Concepte obert/Processament a nivell de declaracions PHP", cosa que us és útil.
Benvingut a compartir l'enllaç d'aquest article:https://www.chenweiliang.com/cwl-494.html
Benvingut al canal de Telegram del bloc de Chen Weiliang per rebre les últimes actualitzacions!
📚 Aquesta guia té un gran valor, 🌟Aquesta és una oportunitat rara, no la perdis! ⏰⌛💨
Comparteix i m'agrada si t'agrada!
Els vostres likes i compartir són la nostra motivació contínua!