Bene, il problema è che MySQL non ha l'equivalente di un STOP ACTION
comando. Quindi, in pratica, le soluzioni alternative sono piuttosto sporche:
Un modo è che puoi violare un vincolo all'interno del trigger per visualizzare un errore e annullare l'inserimento:
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');
Quindi, nel trigger, prova a:
INSERT INTO stop_action (1, 'Assert Failure');
Il vantaggio è che l'errore restituito sarà un errore di chiave duplicata e il testo includerà "Assert Failure".
Quindi il tuo trigger diventerebbe:
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 ;
Ora, dovresti farlo prima di UPDATE
inoltre, altrimenti potresti aggiornare la data in uno stato non valido. Ma per il resto, questo dovrebbe almeno iniziare...