MySQL autorise-t-il l'utilisation de transactions imbriquées?
Réponses:
InnoDB
prend en charge SAVEPOINTS
.
Vous pouvez faire ce qui suit:
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
---
Depuis la documentation MySQL:
Les transactions ne peuvent pas être imbriquées. Il s'agit d'une conséquence de la validation implicite effectuée pour toute transaction en cours lorsque vous émettez une instruction START TRANSACTION ou l'un de ses synonymes. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html