दुर्भाग्य से MySQL SQL चेक बाधाओं का समर्थन नहीं करता है। आप संगतता कारणों से उन्हें अपनी DDL क्वेरी में परिभाषित कर सकते हैं, लेकिन उन्हें अनदेखा किया जाता है।
एक सरल विकल्प है
आप बना सकते हैं BEFORE INSERT
और BEFORE UPDATE
ट्रिगर कर सकते हैं जो या तो एक त्रुटि का कारण बनता है या डेटा की आवश्यकताओं को पूरा नहीं होने पर फ़ील्ड को इसके डिफ़ॉल्ट मान पर सेट करता है।
BEFORE INSERT
MySQL 5.5 के बाद काम करने के लिए उदाहरण
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
MySQL 5.5 से पहले आपको एक त्रुटि का कारण बनना था, जैसे कि एक अपरिभाषित प्रक्रिया।
दोनों मामलों में यह एक अंतर्निहित लेनदेन रोलबैक का कारण बनता है। MySQL प्रक्रियाओं और ट्रिगर्स के भीतर ही ROLLBACK स्टेटमेंट की अनुमति नहीं देता है।
यदि आप लेन-देन को रोलबैक नहीं करना चाहते हैं (INSERT / UPDATE को एक असफल "चेक बाधा" के साथ भी पास होना चाहिए, तो आप उस मान को अधिलेखित कर सकते हैं SET NEW.ID = NULL
जो आईडी को फ़ील्ड डिफ़ॉल्ट मान पर सेट करेगा, वास्तव में आईडी के लिए कोई मतलब नहीं है यद्यपि
संपादित करें:
आवारा उद्धरण हटाया।
:=
ऑपरेटर के बारे में :
इसके विपरीत =
, :=
ऑपरेटर की तुलना ऑपरेटर के रूप में कभी नहीं की जाती है। इसका मतलब है कि आप :=
किसी वैल्यू को असाइन करने के लिए किसी भी मान्य एसक्यूएल स्टेटमेंट (सिर्फ सेट स्टेटमेंट में नहीं) का उपयोग कर सकते हैं ।
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
संबंधित पहचानकर्ता उद्धरण के बारे में:
पहचानकर्ता उद्धरण वर्ण बैकटिक है ("` ")
यदि ANSI_QUOTES SQL मोड सक्षम है, तो पहचानकर्ताओं को दोहरे उद्धरण चिह्नों के भीतर उद्धृत करना भी अनुमत है
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html