Pergunta

O MySQL permite o uso de transações aninhadas?

Foi útil?

Solução

suportes InnoDB SAVEPOINTS.

Você pode fazer o seguinte:

CREATE TABLE t_test (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;

START TRANSACTION;

INSERT
INTO    t_test
VALUES  (1);

SELECT  *
FROM    t_test;

 id
---
  1

SAVEPOINT tran2;

INSERT
INTO    t_test
VALUES  (2);

SELECT  *
FROM    t_test;

 id
---
  1
  2

ROLLBACK TO tran2;

SELECT  *
FROM    t_test;

 id
---
  1

ROLLBACK;

SELECT  *
FROM    t_test;

 id
---

Outras dicas

De documentação do MySQL:

As transações podem não ser aninhados. Esta é uma consequência do COMMIT implícito realizado para qualquer transação atual quando você emitir uma declaração START TRANSACTION ou um de seus sinônimos. https://dev.mysql.com/doc/refman/5.7 /en/implicit-commit.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top