Directorio de artigos
Base de datos MySQLInstrucción php de illamento/concepto aberto/procesamento de nivel de transacción
MySQL Asuntos
As transaccións MySQL utilízanse principalmente para procesar datos cunha gran cantidade de operacións e alta complexidade.Por exemplo, no sistema de xestión de persoal, se elimina unha persoa, cómpre eliminar tanto a información básica da persoa como a información relacionada coa persoa, como caixas de correo, artigos, etc. Deste xeito, estas declaracións de operación de base de datos constituír unha transacción!
- As transaccións son compatibles en MySQL só para bases de datos ou táboas que usan o motor de bases de datos Innodb.
- O procesamento de transaccións pódese utilizar para manter a integridade da base de datos, garantindo que os lotes de instrucións SQL se executen ou non se executen ningunha delas.
- As transaccións úsanse para xestionar a inserción, actualización e eliminación de extractos
En xeral, unha transacción debe cumprir 4 condicións (ACID): Atomicidade (atomicidade), Consistencia (estabilidade), Illamento (illamento), Durabilidade (fiabilidade)
- 1,Atomicidade das transaccións:Un conxunto de transaccións que teñen éxito ou se retiran.
- 2,estabilidade:Hai datos ilegais (restricións de claves estranxeiras e similares) e a transacción retírase.
- 3,Illamento:As transaccións realízanse de forma independente.Se o resultado dunha transacción afecta a outras transaccións, outras transaccións serán retiradas.Illamento 100 % das transaccións, o que require sacrificar a velocidade.
- 4,fiabilidade:Despois do fallo de software e hardware, o controlador da táboa de datos de InnoDB usará o ficheiro de rexistro para reconstruílo e modificalo.A fiabilidade e a alta velocidade non poden ter ambas as dúas, a opción innodb_flush_log_at_trx_commit determina cando gardar as transaccións no rexistro.
Baixo a configuración predeterminada da liña de comandos de MySQL, as transaccións son confirmadas automaticamente, é dicir, a operación COMMIT executarase inmediatamente despois de que se execute a instrución SQL.Polo tanto, para abrir explícitamente unha transacción hai que usar o comando BEGIN ou START TRANSACTION, ou executar o comando SET AUTOCOMMIT=0, para desactivar o uso da confirmación automática para a sesión actual.
Declaración de control de transaccións:
- COMEZAR ou COMEZAR A TRANSACCIÓN; iniciar explícitamente unha transacción;
- COMMIT; COMMIT WORK tamén se pode usar, pero os dous son equivalentes. COMMIT confirma a transacción e fai permanentes todas as modificacións feitas na base de datos;
- ROLLBACK; é posible usar ROLLBACK WORK, pero os dous son equivalentes.A reversión finaliza a transacción do usuario e desfai todas as modificacións non comprometidas en curso;
- identificador SAVEPOINT; SAVEPOINT permite crear un punto de gardar nunha transacción, e pode haber varios SAVEPOINT nunha transacción;
- RELEASE SAVEPOINT identificador; elimina un punto de salvamento dunha transacción, cando non hai ningún punto de salvamento especificado, ao executar a instrución xerará unha excepción;
- ROLLBACK TO identificador; retrocede a transacción ata o punto;
- SET TRANSACTION; usado para establecer o nivel de illamento da transacción. O motor de almacenamento InnoDB ofrece niveis de illamento de transaccións de LECTURA SIN COMPROMISO, LECTURA COMPROMETA, LECTURA REPETIBLE e SERIALIZABLE.
Hai dous métodos principais de procesamento de transaccións MYSQL:
1. Use BEGIN, ROLLBACK, COMMIT para lograr
- Comezar iniciar unha transacción
- RETROCESO reversión da transacción
- COMETER Confirmación da transacción
2. Use SET directamente para cambiar o modo de confirmación automática de MySQL:
- SETAUTOCOMMIT=0 Desactivar a confirmación automática
- SETAUTOCOMMIT=1 Activa a confirmación automática
proba de transacción
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>
Usando instancias de transacción en PHP
MySQL ORDEN POR proba:
<? 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); ?>
Blog de Hope Chen Weiliang ( https://www.chenweiliang.com/ ) compartiu "illamento de retroceso de transaccións de base de datos MySQL/concepto aberto/procesamento de nivel de instrucións PHP", que é útil para vostede.
Benvido a compartir a ligazón deste artigo:https://www.chenweiliang.com/cwl-494.html
Benvido á canle de Telegram do blog de Chen Weiliang para recibir as últimas actualizacións.
📚 Esta guía contén un gran valor, 🌟Esta é unha oportunidade rara, non a perdas! ⏰⌛💨
Comparte e da like se che gusta!
O teu compartir e gústame son a nosa motivación continua!