Ich habe festgestellt, dass START TRANSACTION
automatisch COMMIT
die vorherigen Abfragen. Aus diesem Grund und der Tatsache, dass ich mehrere gespeicherte Prozeduren vor dem Ende der gesamten Transaktion aufgerufen habe, muss ich überprüfen, ob ich in einem START TRANSACTION
bin oder nicht. Beim Lesen des Handbuchs habe ich verstanden, dass Autocommit in einem START TRANSACTION
auf false gesetzt ist, aber es sieht nicht so aus. Ich habe das folgende Verfahren geschrieben:MySQL - Wie überprüft man, ob START TRANSACTION aktiv ist
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_transaction`()
BEGIN
show session variables like 'autocommit';
start transaction;
show session variables like 'autocommit';
COMMIT;
show session variables like 'autocommit';
END
Aber jede show session variables like 'autocommit';
zeigen autocommit = ON, während ich die zweite erwartete autocommit = OFF werden. Wie kann ich überprüfen, ob ich in einem START TRANSACTION
bin?
Ich muss diese Prüfung durchführen, weil ich procedure1 habe, das START TRANSACTION
benötigt, dann ruft es procedure2 auf, die auch START TRANSACTION
benötigen. Aber nehmen wir an, ich habe eine dritte Prozedur different_procedure, die auch procedure2 aufrufen muss, aber in diesem Fall wird START TRANSACTION
nicht verwendet. In diesem Szenario benötige ich procedure2, um zu überprüfen, ob START TRANSACTION
initiiert wurde. Ich hoffe, das ist genug klar.
Dank
Dank verwenden kann, dass eine Lösung sein, aber es ist hässlich. Ich glaube, es sollte einen sauberen Weg geben, um zu überprüfen, ob Sie sich in einer "Starttransaktion" befinden. –
@Stefano Giacone Haben Sie versucht, SELECT @@ autocommit auszuwählen? –
Ja, es ist dasselbe. Das SET-Autocommit = 0; Lösung es ist wirklich schrecklich, ich bevorzuge eine bessere, wenn möglich ... –