sql >> Base de Datos >  >> RDS >> Mysql

¿Activadores que hacen que los INSERTOS fallen? ¿Posible?

De este entrada de blog

Desencadenadores de MySQL:¿Cómo cancela una INSERCIÓN, ACTUALIZACIÓN o ELIMINACIÓN con un desencadenador? En #mysql de EfNet, alguien preguntó:

¿Cómo hago que un disparador cancele la operación si falla mi regla comercial?

En MySQL 5.0 y 5.1 necesita recurrir a algunos trucos para hacer que un disparador falle y entregue un mensaje de error significativo. Las preguntas frecuentes de MySQL StoredProcedure dicen esto sobre el manejo de errores:

SP 11. ¿Los SP tienen una declaración de "aumento" para "aumentar errores de aplicación"? Lo siento, no en este momento. Las sentencias SQL estándar SIGNAL y RESIGNAL están en TODO.

Tal vez MySQL 5.2 incluirá SIGNALstatement que hará que este hackstolen directamente de MySQL StoredProcedure Programming quede obsoleto. ¿Cuál es el truco? Vas a obligar a MySQL a intentar usar una columna que no existe. ¿Feo? Sí. ¿Funciona? Claro.

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;