Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL InnoDB - Confuso sobre transações


Se o problema for algo como "Esta inserção violou uma chave exclusiva ", o commit ocorrerá. Você deve verificar se a consulta retornou erros e, em caso afirmativo, ROLLBACK .

Se o problema for, por exemplo, um desligamento inesperado do servidor, as consultas 1 e 2 não ocorrerão.

Claro, já que suas 3 consultas aqui são as mesmas, este é um exemplo bobo. Pelo menos altere a lid ver. Por que você não faz um teste rápido?

Editar:você editou sua pergunta sobre a finalidade das transações.


O objetivo das transações é realmente manter o banco de dados em um estado consistente (leia sobre ACID ), mas cabe ao programador decidir o que é consistente. Veja a resposta do prodigitalson para ver um exemplo de uma possível maneira php de captura de erros que faz isso para você. Mas enquanto você estiver em uma transação, outros processos não verão as alterações que sua transação está fazendo - portanto, atômicas e isoladas.
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;