Czy transakcje zagnieżdżone są dozwolone w MySQL?

89

Czy MySQL umożliwia korzystanie z transakcji zagnieżdżonych?

Alix Axel
źródło
5
mysql nie obsługuje transakcji zagnieżdżonych
hamedkh

Odpowiedzi:

78

InnoDBobsługuje SAVEPOINTS.

Możesz wykonać następujące czynności:

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
---
Quassnoi
źródło
20
nie o to chodziło, „punkty zapisu” to jedna rzecz „obsługa transakcji zagnieżdżonych” była prawdziwym pytaniem. Zobacz ten link
arod
1
@arod: czy mógłbyś wyjaśnić różnicę w kontekście jednowątkowym? Dzięki!
Quassnoi
@Quassnoi Uważam, że polecenia wydawane DB różnią się, prawda? Mogę się mylić
arod
2
@Quassnoi łącze, które podałem, miało pokazać, że transakcje zagnieżdżone są teraz obsługiwane. Teraz punkty zapisu są potężne, ale nie są tym samym, co zagnieżdżone BEGIN, COMMIT / ROLLBACK (mówiąc programowo, z punktu widzenia poleceń), chociaż wydaje się, że w „kontekście jednowątkowym” są one równoważne. Zamierzałem odnieść się do tego pytania bezpośrednio (3 lata później :) ...
arod
12
@arod: wiesz, że podany przez Ciebie link nie ma nic wspólnego z MySQL, prawda?
Quassnoi
38

Z dokumentacji MySQL:

Nie można zagnieżdżać transakcji. Jest to konsekwencja niejawnego zatwierdzenia wykonywanego dla dowolnej bieżącej transakcji podczas wydawania instrukcji START TRANSACTION lub jednego z jej synonimów. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

bancer
źródło