Ну, проблема в том, что 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
, иначе вы можете обновить дату до недопустимого состояния. Но в противном случае это должно, по крайней мере, помочь вам начать ...