Е, проблемът е, че MySQL няма еквивалент на STOP ACTION
команда. Така че по принцип работата е доста мръсна:
Един от начините е, че можете да нарушите ограничение вътре в тригера, за да пуснете грешка и да отмените вмъкването:
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');
След това в спусъка просто опитайте да:
INSERT INTO stop_action (1, 'Assert Failure');
Предимството на това е, че върнатата грешка ще бъде грешка с дублиран ключ и текстът ще включва „Неуспешно потвърждаване“.
Така че тогава спусъкът ви ще бъде:
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 ;
Сега ще трябва да направите това преди UPDATE
също така, в противен случай можете да актуализирате датата в невалидно състояние. Но в противен случай това поне трябва да ви помогне да започнете...