O MySQL não reconhece uma instrução começando com a palavra-chave
IF
como uma instrução SQL válida. O
IF
A instrução funciona apenas no contexto de uma instrução composta (ou seja, um bloco de instruções entre BEGIN
e END
. Atualmente, a instrução composta é suportada apenas no contexto de um programa armazenado (procedimento armazenado, função ou gatilho). http://dev.mysql.com/doc/refman /5.5/en/begin-end.html
Para testar, tente...
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;
(NOTA:não estou defendendo aqui que as transações sejam tratadas dentro do procedimento armazenado. Minha preferência pessoal é NÃO fazer isso e, em vez disso, lidar com transações em um nível mais alto. Mas o exemplo acima deve funcionar; acredito que o MySQL suporta a chamada START TRANSACTION , COMMIT e ROLLBACK no contexto de um procedimento armazenado.)