SIGNAL SQLSTATE का उपयोग करें
ट्रिगर के अंदर INSERT या UPDATE ऑपरेशन को रोकने के लिए, SIGNAL SQLSTATE '45000' का उपयोग करें जो एक कस्टम त्रुटि उठाता है और ऑपरेशन को रद्द कर देता है।
ट्रिगर सिंटैक्स
DELIMITER //
CREATE TRIGGER yourTriggerName
BEFORE INSERT ON yourTableName
FOR EACH ROW
BEGIN
IF (yourCondition) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'yourErrorMessage';
END IF;
END //
DELIMITER ;
व्यावहारिक उदाहरण: Id 1 से 5 के बीच होना चाहिए
टेबल बनाना
mysql> CREATE TABLE Insert_Prevent (
Id INT
);
BEFORE INSERT ट्रिगर बनाना
mysql> DELIMITER //
mysql> CREATE TRIGGER InsertPreventTrigger
BEFORE INSERT ON Insert_Prevent
FOR EACH ROW
BEGIN
IF (NEW.Id < 1 OR NEW.Id > 5) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'You cannot insert record';
END IF;
END //
mysql> DELIMITER ;
परीक्षण: अमान्य मान (रोक दिया जाएगा)
mysql> INSERT INTO Insert_Prevent VALUES(0); ERROR 1644 (45000): You cannot insert record mysql> INSERT INTO Insert_Prevent VALUES(6); ERROR 1644 (45000): You cannot insert record
परीक्षण: वैध मान (सफल)
mysql> INSERT INTO Insert_Prevent VALUES(1); mysql> INSERT INTO Insert_Prevent VALUES(5); mysql> INSERT INTO Insert_Prevent VALUES(2); mysql> INSERT INTO Insert_Prevent VALUES(3);
सम्मिलित डेटा
mysql> SELECT * FROM Insert_Prevent;
+------+ | Id | +------+ | 1 | | 5 | | 2 | | 3 | +------+
मुख्य बिंदु
BEFORE INSERTयाBEFORE UPDATEट्रिगर का उपयोग करें।NEW.column_nameनए मान को संदर्भित करता है।SIGNAL SQLSTATE '45000'एक अनहैंडल्ड यूजर-डिफाइंड एक्सेप्शन उठाता है।MESSAGE_TEXTअंतिम उपयोगकर्ता को दिखाया जाने वाला कस्टम संदेश है।- यह डेटा अखंडता नियमों को डेटाबेस स्तर पर लागू करने का शक्तिशाली तरीका है।