Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível fazer um ROLLBACK em um gatilho MySQL?


Descobri que esta funcionalidade existe desde o MySQL 5.5 e não funciona em versões anteriores.

O gatilho não faz rollback ou commit. Para iniciar qualquer rollback, você deve gerar uma exceção. Assim, seu comando insert/update/delete será abortado. A ação rollback ou commit deve ser gerada em torno do seu comando SQL.

Para gerar sua exceção, no gatilho do seu XXX (por exemplo):
create trigger Trigger_XXX_BeforeInsert before insert on XXX
for each row begin

    if [Test]
    then

      SIGNAL sqlstate '45001' set message_text = "No way ! You cannot do this !";

    end if ;

end ;