2016-07-26 12 views
1

Ich möchte einen Trigger erstellen, der eine Bedingung vor dem Einfügen testen und wenn die Bedingung erfüllt ist, dann annullieren Sie den Einsatz.MySQL-Test vor dem Einfügen und Abbrechen, wenn die Bedingung erfüllt ist

Ich stieß auf diesen Code in der Anleitung, die enthält, wenn Anweisung, aber keine Möglichkeiten zum Abbrechen der Einfügung in der Dokumentation angegeben ist.

CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;

+0

Dieser Trigger ist für "UPDATE" nicht "INSERT". – Blank

+0

Ich denke, die einzige Möglichkeit, ein 'INSERT' von MySQL zu blockieren, wäre eine Ausnahme auszulösen, was nicht sehr nett ist. Gibt es eine Möglichkeit, die INSERT von Ihrer App-Ebene zu blockieren? –

Antwort

2

Sie haben ein ein Fehler auf „Rückkehr“ signal

SIGNAL die Art und Weise zu verwenden ist. SIGNAL liefert Fehler Informationen an einen Handler, an einen äußeren Teil der Anwendung oder an den Client. Außerdem bietet es die Kontrolle über die Eigenschaften des Fehlers (Fehlernummer, SQLSTATE-Wert, Nachricht).

So können Sie

CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    -> FOR EACH ROW 
    -> BEGIN 
    ->  IF NEW.amount < 0 THEN 
    ->   SET NEW.amount = 0; 
    ->  ELSEIF NEW.amount > 100 THEN 
    ->   SET NEW.amount = 100; 
      ELSE 
       SIGNAL SQLSTATE '01000' 
       SET MESSAGE_TEXT = 'Sorry cannot insert', MYSQL_ERRNO = 1000; 
    ->  END IF; 
    -> END; 

-Update haben: Sie möchten vielleicht auch eine entsprechende Fehlernummer einen Blick auf die error messages list und wählen nehmen.