Problem polega na tym, że MySQL nie ma odpowiednika STOP ACTION
Komenda. Tak więc w zasadzie obejścia są dość brudne:
Jednym ze sposobów jest naruszenie ograniczenia wewnątrz wyzwalacza, aby wyświetlić błąd i anulować wstawianie:
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');
Następnie w spuście spróbuj:
INSERT INTO stop_action (1, 'Assert Failure');
Zaletą tego jest to, że zwracany błąd będzie zduplikowanym błędem klucza, a tekst będzie zawierał „Niepowodzenie potwierdzenia”.
Więc wtedy twój wyzwalacz stanie się:
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 ;
Teraz musisz to zrobić przed UPDATE
również, w przeciwnym razie możesz zaktualizować datę do nieprawidłowego stanu. Ale w przeciwnym razie powinno to przynajmniej sprawić, że zaczniesz...