Mysql
 sql >> Datenbank >  >> RDS >> Mysql

TRIGGER, die dazu führen, dass INSERTs fehlschlagen? Möglich?

Von diesem Blogbeitrag ab

MySQL-Trigger:Wie bricht man ein INSERT, UPDATE oder DELETE mit attrigger ab? Auf #mysql von EfNet hat jemand gefragt:

Wie bringe ich einen Auslöser dazu, den Vorgang abzubrechen, wenn meine Geschäftsregel fehlschlägt?

In MySQL 5.0 und 5.1 müssen Sie auf einige Tricks zurückgreifen, damit ein Trigger fehlschlägt und eine aussagekräftige Fehlermeldung liefert. Die häufig gestellten Fragen zu MySQL StoredProcedure sagen Folgendes über die Fehlerbehandlung:

SP 11. Haben SPs eine „Raise“-Anweisung, um „Anwendungsfehler zu melden“? Entschuldigung, derzeit nicht. Die SQL-Standardanweisungen SIGNAL und RESIGNAL befinden sich in TODO.

Vielleicht wird MySQL 5.2 SIGNALstatement enthalten, wodurch dieser direkt aus der MySQL StoredProcedure Programming gestohlene Hack obsolet wird. Was ist der Hack? Sie werden MySQL zwingen, zu versuchen, eine Spalte zu verwenden, die nicht existiert. Hässlich? Ja. Funktioniert es? Sicher.

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;