Nå, problemet er, at MySQL ikke har en ækvivalent til en STOP ACTION
kommando. Så dybest set er arbejdsomgivelserne ret beskidte:
En måde er, at du kan overtræde en begrænsning inde i triggeren for at boble en fejl og annullere indsættelsen:
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');
Derefter, i triggeren, skal du bare prøve at:
INSERT INTO stop_action (1, 'Assert Failure');
Fordelen ved det er, at den fejl, der returneres, vil være en dubletnøglefejl, og teksten vil indeholde "Bekræft fejl".
Så din trigger ville blive:
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 skal du gøre dette før UPDATE
også, ellers kan du opdatere datoen til en ugyldig tilstand. Men ellers burde det i det mindste få dig i gang...