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

Unterstützt MySQL die Verschachtelung von Transaktionen?

藏色散人
藏色散人nach vorne
2019-05-14 15:15:192664Durchsuche

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 der Ausführung Operation 1 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('111');
 
SAVEPOINT p1;
 
insert into `test`(`name`) values('222');
 
ROLLBACK TO p1;
 
commit;

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yurunsoft.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen