MySQL no reconoce una declaración que comienza con la palabra clave IF
como una instrucción SQL válida.
El IF
funciona solo en el contexto de una declaración compuesta (es decir, un bloque de declaraciones encerrado entre BEGIN
y END
. Actualmente, la instrucción compuesta solo se admite en el contexto de un programa almacenado (procedimiento almacenado, función o activador).
http://dev.mysql.com/doc/refman /5.5/es/comienzo-fin.html
Para probar, intente...
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:no estoy defendiendo aquí que las transacciones se manejen dentro del procedimiento almacenado. Mi preferencia personal es NO hacer esto y, en cambio, manejar las transacciones a un nivel superior. Pero el ejemplo anterior debería funcionar; creo que MySQL admite llamar a START TRANSACTION , COMMIT y ROLLBACK dentro del contexto de un procedimiento almacenado.)