Вопрос

Разрешает ли MySQL использование вложенных транзакций?

Это было полезно?

Решение

InnoDB поддерживает SAVEPOINTS.

Вы можете сделать следующее:

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

Другие советы

Из документации MySQL:

Транзакции не могут быть вложенными.Это является следствием неявной фиксации, выполняемой для любой текущей транзакции при выполнении инструкции START TRANSACTION или одного из ее синонимов. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top