Welnu, het probleem is dat MySQL geen equivalent heeft van een STOP ACTION
opdracht. Dus eigenlijk zijn de work arounds nogal vies:
Eén manier is dat je een beperking binnen de trigger kunt schenden om een fout te bubbelen en het invoegen te annuleren:
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');
Probeer dan in de trigger:
INSERT INTO stop_action (1, 'Assert Failure');
Het voordeel hiervan is dat de fout die wordt geretourneerd een dubbele sleutelfout is en dat de tekst "Assert Failure" bevat.
Dus dan zou je trigger worden:
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 ;
Nu moet u dit doen vóór UPDATE
ook, anders zou u de datum in een ongeldige staat kunnen bijwerken. Maar voor de rest zou dat je in ieder geval op weg moeten helpen...