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

TRIGGER che causano il fallimento degli INSERT? Possibile?

Da questo post del blog

Trigger MySQL:come si interrompe un INSERT, UPDATE o DELETE con atrigger? Su #mysql di EfNet qualcuno ha chiesto:

Come faccio a fare in modo che un trigger interrompa l'operazione se la mia regola aziendale non riesce?

In MySQL 5.0 e 5.1 è necessario ricorrere ad alcuni trucchi per far fallire il trigger e fornire un messaggio di errore significativo. Le FAQ di MySQL StoredProcedure dicono questo sulla gestione degli errori:

SP 11. Gli SP hanno un'istruzione "raise" per "sollevare errori di applicazione"? Mi dispiace, non al momento. Le istruzioni SQL standard SIGNAL e RESIGNAL si trovano in TODO.

Forse MySQL 5.2 includerà SIGNALstatement che renderà obsoleto questo hack rubato direttamente da MySQL StoredProcedure Programming. Qual è l'hack? Forzerai MySQL a tentare di utilizzare una colonna che non esiste. Brutto? Sì. Funziona? Certo.

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;