MySQL känner inte igen ett påstående som börjar med nyckelordet IF
som en giltig SQL-sats.
IF
sats fungerar bara i sammanhanget av en sammansatt sats (det vill säga ett block av satser inneslutna mellan BEGIN
och END
. För närvarande stöds den sammansatta satsen endast i sammanhanget av ett lagrat program (lagrad procedur, funktion eller trigger.)
http://dev.mysql.com/doc/refman /5.5/en/begin-end.html
För att testa, försök...
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;
(OBS:Jag förespråkar inte här att transaktioner ska hanteras inom den lagrade proceduren. Min personliga preferens är att INTE göra detta, utan istället hantera transaktioner på en högre nivå. Men exemplet ovan borde fungera; jag tror att MySQL stöder anropet START TRANSACTION , COMMIT och ROLLBACK inom ramen för en lagrad procedur.)