MySQL nie rozpoznaje instrukcji zaczynającej się od słowa kluczowego IF
jako poprawna instrukcja SQL.
IF
Instrukcja działa tylko w kontekście instrukcji złożonej (tj. bloku instrukcji zawartego między BEGIN
i END
. Obecnie instrukcja złożona jest obsługiwana tylko w kontekście programu składowanego (procedury składowanej, funkcji lub wyzwalacza).
http://dev.mysql.com/doc/refman /5.5/pl/początek-koniec.html
Aby przetestować, spróbuj...
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;
(UWAGA:nie opowiadam się tutaj, aby transakcje były obsługiwane w ramach procedury składowanej. Osobiście wolę tego NIE robić, a zamiast tego obsługiwać transakcje na wyższym poziomie. Ale powyższy przykład powinien działać; uważam, że MySQL obsługuje wywoływanie START TRANSACTION , COMMIT i ROLLBACK w kontekście procedury składowanej.)