Sind verschachtelte Transaktionen in MySQL zulässig?


Antworten:


76

InnoDBunterstützt SAVEPOINTS.

Sie können Folgendes tun:

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

18
Dies war nicht die Frage, "Sicherungspunkte" sind eine Sache. Unterstützung für "verschachtelte Transaktionen" war die eigentliche Frage. Siehe diesen Link
arod

1
@arod: Könnten Sie bitte den Unterschied in einem Single-Thread-Kontext erklären? Vielen Dank!
Quassnoi

@Quassnoi Ich glaube, die an die DB ausgegebenen Befehle unterscheiden sich, nicht wahr? Ich könnte mich irren
Uhr

2
@Quassnoi Der Link, den ich bereitgestellt habe, sollte zeigen, dass verschachtelte Transaktionen jetzt unterstützt werden. Jetzt sind Sicherungspunkte leistungsstark, aber sie sind nicht dasselbe wie verschachteltes BEGIN, COMMIT / ROLLBACK (programmgesteuert, befehlsbezogen), obwohl Sie ziemlich sicher zu sein scheinen, dass sie in einem "Single-Threaded-Kontext" gleichwertig sind. Ich wollte die Frage direkt ansprechen (3 Jahre später :) ...
arod

12
@arod: Sie wissen, dass der von Ihnen bereitgestellte Link nichts mit MySQL zu tun hat, nicht wahr?
Quassnoi

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.