Bem, o problema é que o MySQL não tem um equivalente de
STOP ACTION
comando. Então, basicamente, as soluções alternativas são bastante sujas:Uma maneira é que você pode violar uma restrição dentro do gatilho para criar um erro e cancelar a inserção:
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');
Então, no gatilho, é só tentar:
INSERT INTO stop_action (1, 'Assert Failure');
A vantagem disso é que o erro retornado será um erro de chave duplicada e o texto incluirá "Falha de declaração".
Então, seu gatilho se tornaria:
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 ;
Agora, você precisa fazer isso antes de
UPDATE
também, caso contrário você pode atualizar a data para um estado inválido. Mas, caso contrário, isso deve pelo menos começar...