Directorio de artículos
base de datos mysqlAislamiento de reversión de transacciones/concepto abierto/declaración php de procesamiento de nivel
MySQL asuntos
Las transacciones de MySQL se utilizan principalmente para procesar datos con una gran cantidad de operaciones y alta complejidad.Por ejemplo, en el sistema de gestión de personal, si elimina una persona, debe eliminar tanto la información básica de la persona como la información relacionada con la persona, como buzones, artículos, etc. De esta manera, estas declaraciones de operación de base de datos constituyen una transacción!
- Las transacciones se admiten en MySQL solo para bases de datos o tablas que utilizan el motor de base de datos Innodb.
- El procesamiento de transacciones se puede utilizar para mantener la integridad de la base de datos, asegurando que los lotes de sentencias SQL se ejecuten todos o ninguno.
- Las transacciones se utilizan para administrar declaraciones de inserción, actualización y eliminación
En términos generales, las transacciones deben cumplir 4 condiciones (ACID): Atomicidad (atomicidad), Consistencia (estabilidad), Aislamiento (aislamiento), Durabilidad (confiabilidad)
- 1,Atomicidad de las transacciones:Un conjunto de transacciones, ya sea exitosas o retiradas.
- 2,estabilidad:Hay datos ilegales (restricciones de clave externa y similares) y se retira la transacción.
- 3,Aislamiento:Las transacciones se ejecutan de forma independiente.Si el resultado de una transacción afecta a otras transacciones, se retirarán otras transacciones.100% aislamiento de transacciones a expensas de la velocidad.
- 4,fiabilidad:Después del bloqueo del software y el hardware, el controlador de la tabla de datos de InnoDB utilizará el archivo de registro para reconstruirlo y modificarlo.La confiabilidad y la alta velocidad no pueden tener ambos, la opción innodb_flush_log_at_trx_commit determina cuándo guardar las transacciones en el registro.
Según la configuración predeterminada de la línea de comandos de MySQL, las transacciones se confirman automáticamente, es decir, la operación COMMIT se ejecutará inmediatamente después de que se ejecute la instrucción SQL.Por lo tanto, para abrir explícitamente una transacción debe usar el comando BEGIN o START TRANSACTION, o ejecutar el comando SET AUTOCOMMIT=0, para deshabilitar el uso de confirmación automática para la sesión actual.
Declaración de control de transacciones:
- BEGIN o START TRANSACTION; iniciar explícitamente una transacción;
- COMMIT; COMMIT WORK también se puede usar, pero los dos son equivalentes. COMMIT confirma la transacción y hace que todas las modificaciones realizadas en la base de datos sean permanentes;
- ROLLBACK; es posible usar ROLLBACK WORK, pero los dos son equivalentes.Rollback finaliza la transacción del usuario y deshace cualquier modificación no confirmada en curso;
- Identificador SAVEPOINT; SAVEPOINT permite crear un punto de guardado en una transacción, y puede haber varios SAVEPOINT en una transacción;
- RELEASE SAVEPOINT identificador; eliminar un punto de guardado de una transacción, cuando no hay un punto de guardado especificado, la ejecución de la declaración generará una excepción;
- ROLLBACK TO identificador, revertir la transacción hasta el punto;
- SET TRANSACTION; se utiliza para establecer el nivel de aislamiento de la transacción. El motor de almacenamiento InnoDB proporciona niveles de aislamiento de transacciones de LECTURA NO COMPROMETIDA, LECTURA COMPROMETIDA, LECTURA REPETIBLE y SERIALIZABLE.
Hay dos métodos principales de procesamiento de transacciones MYSQL:
1. Use BEGIN, ROLLBACK, COMMIT para lograr
- EMPEZAR iniciar una transacción
- RETROCEDER reversión de transacciones
- COMETER Confirmación de transacción
2. Use SET directamente para cambiar el modo de confirmación automática de MySQL:
- ESTABLECER COMPROMISO AUTOMÁTICO = 0 Deshabilitar confirmación automática
- ESTABLECER COMPROMISO AUTOMÁTICO = 1 Activar confirmación automática
prueba 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>
Uso de instancias de transacciones en PHP
MySQL ORDEN POR prueba:
<? 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); ?>
Esperanza Chen Weiliang Blog ( https://www.chenweiliang.com/ ) compartió "Aislamiento de reversión de transacciones de base de datos MySQL/Concepto abierto/Procesamiento de nivel de declaraciones PHP", que es útil para usted.
Bienvenido a compartir el enlace de este artículo:https://www.chenweiliang.com/cwl-494.html
¡Bienvenido al canal de Telegram del blog de Chen Weiliang para obtener las últimas actualizaciones!
📚 Esta guía contiene un gran valor. 🌟Esta es una oportunidad única, ¡no la pierdas! ⏰⌛💨
¡Comparte y dale me gusta si te gusta!
¡Su compartir y Me gusta son nuestra motivación continua!