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< 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('111'); SAVEPOINT p1; insert into `test`(`name`) values('222'); ROLLBACK TO p1; commit;
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!