खैर, समस्या यह है कि 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
. से पहले करना होगा साथ ही, अन्यथा आप दिनांक को अमान्य स्थिति में अपडेट कर सकते हैं। लेकिन अन्यथा, यह आपको कम से कम आरंभ करना चाहिए...