हम जानते हैं कि MySQL संदर्भीय अखंडता के लिए विदेशी कुंजी का समर्थन करता है लेकिन यह CHECK CONSTRAINT का समर्थन नहीं करता। हालाँकि, हम ट्रिगर का उपयोग करके उनका अनुकरण कर सकते हैं। इसे नीचे दिए गए उदाहरण से समझा जा सकता है:
उदाहरण
मान लीजिए हमारे पास 'car' नामक एक तालिका है जिसमें निश्चित वाक्यविन्यास पंजीकरण संख्या हो सकती है जैसे दो अक्षर, एक डैश, तीन अंक, एक डैश, दो अक्षर:
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 का अनुकरण करने हेतु BEFORE INSERT ट्रिगर बनाना:
अब, हम ऐसा सम्मिलन रोकने के लिए निम्न ट्रिगर बना सकते हैं:
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)