Pregunta

¿Tiene MySQL permite el uso de transacciones anidadas?

¿Fue útil?

Solución

InnoDB apoya SAVEPOINTS.

Puede hacer lo siguiente:

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
---

Otros consejos

A partir de la documentación de MySQL:

  

Las transacciones no se pueden anidar. Esto es una consecuencia de la COMMIT implícito realizado por cualquier transacción en curso cuando se emite un comando START transacción o uno de sus sinónimos.    https://dev.mysql.com/doc/refman/5.7 /en/implicit-commit.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top