Problém je v tom, že MySQL nemá ekvivalent STOP ACTION
příkaz. Takže v zásadě jsou práce kolem docela špinavé:
Jedním ze způsobů je, že můžete porušit omezení uvnitř spouštěče, abyste vybublali chybu a zrušili vložení:
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');
Pak ve spouštěči zkuste:
INSERT INTO stop_action (1, 'Assert Failure');
Výhodou toho je, že vrácená chyba bude duplicitní klíčová chyba a text bude obsahovat "Assert Failure".
Takže váš spouštěč by se stal:
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 ;
Nyní byste to měli udělat před UPDATE
jinak byste mohli aktualizovat datum do neplatného stavu. Ale jinak by vás to mělo alespoň nastartovat...