Från denna blogginlägg
MySQL-utlösare:Hur avbryter du en INSERT, UPPDATERING eller DELETE med atrigger? På EfNets #mysql frågade någon:
Hur får jag en utlösare att avbryta operationen om min affärsregel misslyckas?
I MySQL 5.0 och 5.1 måste du ta till lite knep för att få atrigger att misslyckas och leverera ett meningsfullt felmeddelande. MySQL StoredProcedure FAQ säger detta om felhantering:
SP 11. Har SP:er en "höjning"-sats för att "höja applikationsfel"? Tyvärr, inte för närvarande. SQL-standardsatserna SIGNAL och RESIGNAL finns på TODO.
Kanske kommer MySQL 5.2 att inkludera SIGNALstatement som kommer att göra denna hackstolen direkt från MySQL StoredProcedure Programmering föråldrad. Vad är hacket? Du kommer att tvinga MySQL att försöka använda en kolumn som inte existerar. Ful? Ja. Fungerar det? Visst.
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;