MySQL erkennt keine Anweisung, die mit dem Schlüsselwort IF
beginnt as als gültige SQL-Anweisung.
Das IF
-Anweisung funktioniert nur im Kontext einer zusammengesetzten Anweisung (d. h. eines Blocks von Anweisungen, der zwischen BEGIN
eingeschlossen ist und END
. Derzeit wird die zusammengesetzte Anweisung nur im Kontext eines gespeicherten Programms (gespeicherte Prozedur, Funktion oder Trigger) unterstützt.
http://dev.mysql.com/doc/refman /5.5/en/begin-end.html
Versuchen Sie zum Testen...
DELIMITER //
CREATE PROCEDURE usp_test_transaction()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
-- whatever DML operations and SELECT statements you want to perform go here
IF (1=1) THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END//
DELIMITER ;
CALL usp_test_transaction;
(HINWEIS:Ich befürworte hier nicht, dass Transaktionen innerhalb einer gespeicherten Prozedur behandelt werden. Meine persönliche Präferenz ist es, dies NICHT zu tun und stattdessen Transaktionen auf einer höheren Ebene zu behandeln. Aber das obige Beispiel sollte funktionieren; ich glaube, MySQL unterstützt den Aufruf von START TRANSACTION , COMMIT und ROLLBACK im Kontext einer gespeicherten Prozedur.)