Le transazioni nidificate sono consentite in MySQL?


Risposte:


78

InnoDBsupporti SAVEPOINTS.

Puoi fare quanto segue:

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
questa non era la domanda, i "punti di salvataggio" sono una cosa che il supporto delle "transazioni annidate" era la vera domanda. Vedi questo link
arod

1
@arod: potresti spiegare la differenza in un contesto a thread singolo? Grazie!
Quassnoi

@Quassnoi Credo che i comandi inviati al DB siano diversi, non è vero? Potrei sbagliarmi
AROD

2
@Quassnoi il collegamento che ho fornito era per mostrare che le transazioni nidificate sono ora supportate. Ora, i punti di salvataggio sono potenti, ma non sono la stessa cosa di BEGIN, COMMIT / ROLLBACK annidati (parlando in modo programmatico, dal punto di vista dei comandi) sebbene sembri abbastanza sicuro che in un "contesto a thread singolo" siano equivalenti. Avevo intenzione di affrontare la domanda direttamente (3 anni dopo :) ...
arod

12
@arod: sai che il link che hai fornito non ha nulla a che fare con MySQL, vero?
Quassnoi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.