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


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.