Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL If-Anweisung in Transaktion verursacht Fehler

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.)