sql >> Database >  >> RDS >> Mysql

TRIGGER's die ervoor zorgen dat INSERT's mislukken? Mogelijk?

Van deze blogbericht

MySQL-triggers:hoe breek je een INSERT, UPDATE of DELETE af met atrigger? Op EfNet's #mysql vroeg iemand:

Hoe zorg ik ervoor dat een trigger de bewerking afbreekt als mijn bedrijfsregel faalt?

In MySQL 5.0 en 5.1 moet je je toevlucht nemen tot een of andere truc om atrigger te laten mislukken en een zinvolle foutmelding te geven. De MySQL StoredProcedure FAQ zegt dit over foutafhandeling:

SP 11. Hebben SP's een “raise”-statement om “applicatiefouten te verhogen”? Sorry, momenteel niet. De SQL-standaard SIGNAL- en RESIGNAL-instructies staan ​​op de TODO.

Misschien zal MySQL 5.2 SIGNALstatement bevatten waardoor deze hackstolen rechtstreeks uit MySQL StoredProcedure Programming overbodig worden. Wat is de hack? Je gaat MySQL forceren om te proberen een kolom te gebruiken die niet bestaat. Lelijk? Ja. Werkt het? Zeker.

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. Advies vragen :Eén volgorde voor alle tabellen

  2. Kan geen verbinding maken met lokale MySQL-server via socket '/var/mysql/mysql.sock' (38)

  3. Een lijst met database-e-mailaccounts krijgen in SQL Server (T-SQL)

  4. Vind het totale aantal resultaten in mySQL-query met offset+limiet