Mysql
 sql >> Database >  >> RDS >> Mysql

Istruzione MySQL If nella transazione che causa un errore

MySQL non riconosce un'istruzione che inizia con la parola chiave IF come un'istruzione SQL valida.

Il IF istruzione funziona solo nel contesto di un'istruzione composta (cioè un blocco di istruzioni racchiuso tra BEGIN e END . Attualmente, l'istruzione composta è supportata solo nel contesto di un programma memorizzato (procedura memorizzata, funzione o trigger.)

http://dev.mysql.com/doc/refman /5.5/it/inizio-fine.html

Per il test, prova...

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:non sto sostenendo qui che le transazioni vengano gestite all'interno della stored procedure. La mia preferenza personale è NON farlo e invece gestire le transazioni a un livello superiore. Ma l'esempio sopra dovrebbe funzionare; credo che MySQL supporti la chiamata START TRANSACTION , COMMIT e ROLLBACK nel contesto di una procedura memorizzata.)