MySQL में किसी कॉलम में शून्य (0) मान डालने से रोकने के लिए BEFORE INSERT ट्रिगर का उपयोग करें जो मान की जांच करता है और शून्य होने पर SIGNAL के साथ त्रुटि उठाता है।
सिंटैक्स
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
IF NEW.column_name = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error message';
END IF;
END;
व्यावहारिक उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (Value INT); Query OK, 0 rows affected (0.85 sec)
2. ट्रिगर बनाएं
mysql> DELIMITER //
mysql> CREATE TRIGGER preventing_zero_value
BEFORE INSERT ON DemoTable
FOR EACH ROW
BEGIN
IF NEW.Value = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You cannot provide 0 value';
END IF;
END //
Query OK, 0 rows affected (0.34 sec)
mysql> DELIMITER ;
3. शून्य डालने का प्रयास (ब्लॉक हो जाएगा)
mysql> INSERT INTO DemoTable VALUES (0); ERROR 1644 (45000): You cannot provide 0 value
4. गैर-शून्य मान डालें (सफल)
mysql> INSERT INTO DemoTable VALUES (10), (-1000); Query OK, 2 rows affected (0.15 sec)
5. परिणाम जांचें
mysql> SELECT * FROM DemoTable; +-------+ | Value | +-------+ | 10 | | -1000 | +-------+ 2 rows in set (0.00 sec)
ट्रिगर घटक व्याख्या
| घटक | विवरण |
|---|---|
BEFORE INSERT | इंसर्ट होने से पहले चलता है, मान संशोधित/अस्वीकृत कर सकता है |
FOR EACH ROW | प्रत्येक प्रभावित पंक्ति के लिए चलता है |
NEW.column | नई पंक्ति का मान (INSERT/UPDATE के लिए) |
OLD.column | पुरानी पंक्ति का मान (UPDATE/DELETE के लिए) |
SIGNAL SQLSTATE '45000' | उपयोगकर्ता-परिभाषित अपवाद उठाता है |
अन्य मान्यता उदाहरण
नकारात्मक मान रोकें
IF NEW.age < 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age cannot be negative';
END IF;
स्ट्रिंग लंबाई मान्य करें
IF CHAR_LENGTH(NEW.username) < 3 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Username too short';
END IF;
मान को स्वतः सही करें (ब्लॉक करने के बजाय)
BEFORE INSERT ON DemoTable
FOR EACH ROW
BEGIN
IF NEW.Value = 0 THEN
SET NEW.Value = 1; -- डिफ़ॉल्ट मान सेट करें
END IF;
END;
ट्रिगर देखें और हटाएं
SHOW TRIGGERS; DROP TRIGGER preventing_zero_value;