Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> MySql

हम ट्रिगर्स का उपयोग करके CHECK CONSTRAINT का अनुकरण कैसे कर सकते हैं?

<घंटा/>

जैसा कि हम जानते हैं कि 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 का अनुकरण करने के लिए 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)

मानों को अपडेट करने के लिए CHECK CONSTRAINT का अनुकरण करने के लिए अद्यतन से पहले ट्रिगर बनाना -

अब, मान लीजिए कि अगर हम गलत मान के साथ तालिका को अपडेट करने का प्रयास करेंगे तो MySQL हमें ऐसा करने से नहीं रोकेगा, जैसा कि 7minus है;

mysql> update car set number='AB-2X5-YZ';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

उपरोक्त क्वेरी ने तालिका 'कार' में गलत मान अपडेट किया है। निम्नलिखित क्वेरी में हम एक अद्यतन से पहले ट्रिगर बनाने जा रहे हैं जो हमें तालिका में गलत डेटा अपडेट करने से रोकेगा -

mysql> delimiter //
mysql> create trigger car_update_value before update 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.11 sec)

mysql> Delimiter ;

mysql> update car set number='AB-2X5-YZ';
ERROR 1644 (45000): Not a valid number

  1. CHECK CONSTRAINT का अनुकरण करने के लिए VIEWS का उपयोग कैसे किया जा सकता है?

    जैसा कि हम जानते हैं कि MySQL संदर्भात्मक अखंडता के लिए विदेशी कुंजी का समर्थन करता है लेकिन यह CHECK बाधा का समर्थन नहीं करता है। लेकिन हम ट्रिगर्स का उपयोग करके उनका अनुकरण कर सकते हैं। इसे नीचे दिए गए उदाहरण की मदद से स्पष्ट किया जा सकता है - उदाहरण मान लीजिए कि हमारे पास car1 नाम की एक टेबल है ज

  1. मैं MySQL में किसी तालिका में चेक बाधा कैसे जोड़ूं?

    किसी तालिका में चेक बाधा जोड़ने के लिए, आइए पहले एक तालिका बनाएं। CREATE table yourTableName (    Column_name1 datatyep,    .    .    .    .    Column_name N datatype,    check( condition) ); निम्न प्रकार से आप एक चेक बाधा बनाकर

  1. MySQL संस्करण की जांच कैसे करें

    आइए समझें कि MySQL के उस संस्करण की जांच कैसे करें जो उपयोगकर्ता वर्तमान में चला रहा है - कंसोल पर क्वेरी दर्ज करने से पहले, यह सुनिश्चित करना महत्वपूर्ण है कि उपयोगकर्ता सर्वर से जुड़ा है। MySQL संस्करण जांचें नीचे दी गई क्वेरी उपयोग किए जा रहे सर्वर की संस्करण संख्या और वर्तमान तिथि बताएगी। SEL