Es gibt eine Reihe von Anweisungen, die eine implizite Übergabe verursachen, und keine davon kann innerhalb einer gespeicherten Funktion oder eines Triggers verwendet werden, oder in einer gespeicherten Prozedur, die von einer gespeicherten Funktion oder einem Trigger aufgerufen wird, denn das ist in seiner Nettowirkung nicht wirklich anders.
Eine kurze Überlegung erklärt den Grund dafür:Gespeicherte Funktionen (und Trigger) werden während eine Abfrage läuft ausgeführt . Sie beginnen ohne Ausnahme immer mit der Ausführung, nachdem die Abfrage gestartet wurde, und beenden die Ausführung, bevor die Abfrage beendet ist. Sie können auch mehrmals während der Ausführung einer einzelnen Abfrage ausgeführt werden, insbesondere wenn die Abfrage mehrere Zeilen umfasst.
Vor diesem Hintergrund würde es keinen Sinn machen, wenn es möglich wäre, COMMIT
auszuführen eine Transaktion, während eine einzelne Abfrage läuft ... und das ist, was START TRANSACTION
ist tut, wenn eine Transaktion läuft -- es schreibt die aktuelle Transaktion implizit fest und startet eine neue.
Dies ist in einer gespeicherten Prozedur in Ordnung, solange Sie sie nicht mitten in einer anderen Abfrage aufrufen (über eine gespeicherte Funktion oder einen Trigger, was die einzige Möglichkeit ist, eine Prozedur mitten in einer anderen Abfrage aufzurufen), sondern was tun was Sie hier tun, wird nicht unterstützt... selbst wenn keine Transaktion läuft, ist es immer noch nicht möglich, eine Transaktion mitten in einer laufenden Abfrage zu starten.
http://dev.mysql.com/doc/refman /5.6/en/implicit-commit.html