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

disparadores mysql que simulan afirmaciones

Bueno, el problema es que MySQL no tiene un equivalente de STOP ACTION dominio. Básicamente, las soluciones alternativas están bastante sucias:

Una forma es que puede violar una restricción dentro del activador para generar un error y cancelar la inserción:

CREATE TABLE stop_action (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(35),
    UNIQUE KEY (id, name)
);
INSERT INTO stop_action (1, 'Assert Failure');

Luego, en el gatillo, simplemente intente:

INSERT INTO stop_action (1, 'Assert Failure');

El beneficio de eso es que el error que se devuelve será un error de clave duplicada, y el texto incluirá "Afirmar falla".

Entonces su activador se convertiría en:

delimiter |

CREATE TRIGGER asser1_before BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    SELECT count(*) INTO test FROM (select count(*)
          from Video  
          where Date >= DATE_SUB(current_date(),INTERVAL  1 YEAR ) 
            && Date<=current_date()  
          group by User   
          having count(*) > 200);
    IF test != 0 THEN
        INSERT INTO stop_action (1, 'Assert Failure');
    END IF;
  END;
|

delimiter ;

Ahora, debe hacer esto antes de UPDATE también, de lo contrario, podría actualizar la fecha a un estado no válido. Pero por lo demás, eso al menos debería ayudarte a empezar...