sql >> Base de Datos >  >> RDS >> Mysql

MySQL InnoDB - Confundido acerca de las transacciones

Si el problema es algo como "Este inserto violó una clave única ", se llevará a cabo la confirmación. Debe verificar si la consulta devolvió errores y, de ser así, ROLLBACK .

Si el problema es, por ejemplo, un cierre inesperado del servidor, las consultas 1 y 2 no se realizarán.

Por supuesto, dado que sus 3 consultas aquí son las mismas, este es un ejemplo tonto. Al menos cambia la lid para ver. ¿Por qué no haces una prueba rápida?

Editar:editaste tu pregunta sobre el propósito de las transacciones.

El propósito de las transacciones es ciertamente mantener la base de datos en un estado consistente (lea sobre ACID ), pero depende del programador decidir qué es consistente. Mire la respuesta de prodigitalson para ver un ejemplo de una posible forma de php de captura de errores que hace esto por usted. Pero mientras está en una transacción, otros procesos no verán los cambios que está haciendo su transacción, por lo tanto, atómica y aislada.

CREATE TABLE `testkeys` (
  `lid` INT,
  `column_name` VARCHAR(50),
  UNIQUE KEY `testuniq` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

BEGIN;
INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
COMMIT;