sql >> Databasteknik >  >> RDS >> Mysql

TRIGGERS som gör att INSERT misslyckas? Möjlig?

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;


  1. SQL Server XML-fråga med flera namnområden

  2. Bästa tillvägagångssätt för Microsoft SQL Server-katastrofåterställning

  3. Hur ATAN() fungerar i MariaDB

  4. Funktion i SQL Server 2008 som liknar GREATEST i mysql?