Tja, problemet är att MySQL inte har en motsvarighet till en STOP ACTION
kommando. Så i grund och botten är arbetsmiljöerna ganska smutsiga:
Ett sätt är att du kan bryta mot en begränsning inuti utlösaren för att bubbla ett fel och avbryta infogningen:
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');
Sedan, i avtryckaren, försök bara att:
INSERT INTO stop_action (1, 'Assert Failure');
Fördelen med det är att felet som returneras kommer att vara ett duplicerat nyckelfel, och texten kommer att innehålla "Förstå misslyckande".
Så då skulle din trigger bli:
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 ;
Nu måste du göra detta innan UPDATE
också, annars kan du uppdatera datumet till ett ogiltigt tillstånd. Men annars borde det åtminstone få dig igång...