Fra denne blogindlæg
MySQL-udløsere:Hvordan afbryder du en INSERT, UPDATE eller DELETE med atrigger? På EfNets #mysql spurgte nogen:
Hvordan får jeg en trigger til at afbryde handlingen, hvis min forretningsregel mislykkes?
I MySQL 5.0 og 5.1 skal du ty til nogle tricks for at få atrigger til at fejle og levere en meningsfuld fejlmeddelelse. MySQL StoredProcedure FAQ siger dette om fejlhåndtering:
SP 11. Har SP'er en "raise"-erklæring for at "hæve applikationsfejl"? Beklager, ikke pt. SQL-standard SIGNAL- og RESIGNAL-sætningerne er på TODO.
Måske vil MySQL 5.2 inkludere SIGNALstatement, som vil gøre denne hackstjålet direkte fra MySQL StoredProcedure Programmering forældet. Hvad er hacket? Du vil tvinge MySQL til at forsøge at bruge en kolonne, der ikke eksisterer. Grim? Ja. Virker det? Selvfølgelig.
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;