Heim > Datenbank > MySQL-Tutorial > Unterstützt MySQL die Verschachtelung von Transaktionen?

Unterstützt MySQL die Verschachtelung von Transaktionen?

藏色散人
Freigeben: 2019-05-14 15:15:28
nach vorne
2753 Leute haben es durchsucht

In der letzten Entwicklung bin ich auf das Problem der Datenverwirrung gestoßen, wenn ich MySQL verwendet und Transaktionen mehrmals geöffnet habe. Der Pseudocode lautet wie folgt:

begin;
# 操作1
begin;
# 操作2
rollback;
Nach dem Login kopieren

Nach der Ausführung Operation 1< erschien. Die Daten von 🎜> werden tatsächlich geschrieben und nur die Daten von Operation 2 von werden zurückgesetzt. Wenn die erste Transaktion nicht festgeschrieben oder zurückgesetzt wird und die zweite Transaktion gestartet wird, wird die erste Transaktion automatisch festgeschrieben.

Dies entspricht offensichtlich nicht den psychologischen Erwartungen und es ist auch unmöglich, einen Teil der Operation rückgängig zu machen. Hier stellt sich also die Frage:

Unterstützt MySQL die Verschachtelung von Transaktionen?

Diese Frage lässt sich nur schwer genau beantworten, unabhängig davon, ob sie unterstützt wird oder nicht!

Zuallererst wird ein mehrmaliger Aufruf von begin definitiv keine Verschachtelung von Transaktionen in MySQL ermöglichen. Nachdem ich von einem Freund in der Gruppe daran erinnert wurde, erfuhr ich, dass es in MySQL eine Anweisung namens „savepoint and rollback to“ gibt.

Beispielcode:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
begin;
 
insert into `test`(`name`) values(&#39;111&#39;);
 
SAVEPOINT p1;
 
insert into `test`(`name`) values(&#39;222&#39;);
 
ROLLBACK TO p1;
 
commit;
Nach dem Login kopieren
Das endgültige Ausführungsergebnis ist, dass die Testtabelle nur 111 Daten enthält, wodurch der Rollback-Vorgang einiger Vorgänge realisiert wird. Auf die gleiche Weise wird auch das Problem vermieden, dass eine Transaktion mehrmals gestartet wird, was dazu führt, dass die vorherige Transaktion festgeschrieben wird.

Möglicherweise können der Sicherungspunkt und das Zurücksetzen auf Anweisungen nicht als Transaktionsverschachtelung bezeichnet werden, und es kann nicht gesagt werden, ob MySQL die Transaktionsverschachtelung unterstützt oder nicht. Kurz gesagt, Savepoint und Rollback to können verwendet werden, um einige Funktionen zur Verschachtelung von Transaktionen zu erreichen.

Das obige ist der detaillierte Inhalt vonUnterstützt MySQL die Verschachtelung von Transaktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yurunsoft.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage