जैसा कि हम जानते हैं कि MySQL संदर्भात्मक अखंडता के लिए विदेशी कुंजी का समर्थन करता है लेकिन यह CHECK बाधा का समर्थन नहीं करता है। लेकिन हम ट्रिगर्स का उपयोग करके उनका अनुकरण कर सकते हैं। इसे नीचे दिए गए उदाहरण की मदद से स्पष्ट किया जा सकता है -
उदाहरण
मान लीजिए कि हमारे पास 'कार' नाम की एक टेबल है जिसमें फिक्स सिंटैक्स रजिस्ट्रेशन नंबर हो सकता है जैसे दो अक्षर, एक डैश, तीन अंक, एक डैश, दो अक्षर इस प्रकार हैं -
mysql> Create table car (number char(9)); Query OK, 0 rows affected (0.32 sec) mysql> Insert into car values('AB-235-YZ'); Query OK, 1 row affected (0.10 sec)
उपरोक्त मान एक मान्य है लेकिन उस मूल्य के बारे में क्या है जिसे हम अगली क्वेरी में सम्मिलित करने जा रहे हैं।
mysql> insert into car values('AB-2X5-YZ'); Query OK, 1 row affected (0.04 sec)
उपरोक्त मान मान्य नहीं है क्योंकि इसमें अंकों के बीच एक वर्ण होता है जो हमारे द्वारा उपयोग किए जा रहे निश्चित सिंटैक्स के विरुद्ध होता है।
इन्सर्ट से पहले ट्रिगर बनाना ताकि मान डालने के लिए CHECK CONSTRAINT का अनुकरण किया जा सके -
अब, हम इस प्रकार के सम्मिलन को रोकने के लिए निम्नानुसार एक ट्रिगर बना सकते हैं -
mysql> delimiter // mysql> create trigger car_insert_value before insert on car -> for each row -> begin -> if new.number not rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$' -> then -> signal sqlstate '45000' set message_text = 'Not a valid Number'; -> end if; -> end // Query OK, 0 rows affected (0.15 sec) mysql> Delimiter ; mysql> Delete from car; Query OK, 2 rows affected (0.06 sec)
अब, जब हम गलत नंबर डालने का प्रयास करेंगे, तो ऊपर बनाया गया ट्रिगर हमें ऐसा करने से रोकेगा और इस प्रकार एक त्रुटि देगा -
mysql> insert into car values('AB-2X5-YZ'); ERROR 1644 (45000): Not a Valid Number
लेकिन, हम मान्य मान इस प्रकार सम्मिलित कर सकते हैं -
mysql> insert into car values('AB-235-YZ'); Query OK, 1 row affected (0.04 sec)