¿Se permiten transacciones anidadas en MySQL?

Respuestas:

78

InnoDBapoyos SAVEPOINTS.

Puede hacer lo siguiente:

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
fuente
20
esta no era la pregunta, los "puntos de rescate" son una cosa, el soporte de "transacciones anidadas" era la verdadera pregunta. Vea este enlace
arod
1
@arod: ¿podría explicar la diferencia en un contexto de un solo hilo? ¡Gracias!
Quassnoi
@Quassnoi Creo que los comandos emitidos a la base de datos difieren, ¿no? Podría estar equivocado
arod
2
@Quassnoi, el enlace que proporcioné fue para mostrar que las transacciones anidadas ahora son compatibles. Ahora, los puntos de guardado son poderosos, pero no son lo mismo que BEGIN, COMMIT / ROLLBACK anidados (programáticamente hablando, en términos de comandos) aunque parece bastante seguro de que en un "contexto de un solo subproceso" son equivalentes. Tenía la intención de abordar la pregunta directamente (3 años después :) ...
arod
12
@arod: sabes que el enlace que proporcionaste no tiene nada que ver con MySQL, ¿no?
Quassnoi