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

हम MySQL जेनरेटेड कॉलम का उपयोग करके CHECK CONSTRAINT का अनुकरण कैसे कर सकते हैं?


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

उदाहरण

मान लीजिए हमारे पास 'कार' नाम की एक टेबल है जिसमें फिक्स सिंटैक्स रजिस्ट्रेशन नंबर हो सकता है जैसे दो अक्षर, एक डैश, तीन अंक, एक डैश, दो अक्षर इस प्रकार हैं -

mysql> Create table car2 (number char(9));
Query OK, 0 rows affected (0.32 sec)

mysql> Insert into car2 values('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

उपरोक्त मान मान्य है लेकिन उस मूल्य के बारे में क्या है जिसे हम अगली क्वेरी में सम्मिलित करने जा रहे हैं।

mysql> insert into car2 values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

उपरोक्त मान मान्य नहीं है क्योंकि इसमें अंकों के बीच एक वर्ण होता है जो हमारे द्वारा उपयोग किए जा रहे निश्चित सिंटैक्स के विरुद्ध होता है।

मानों को डालने और अपडेट करने के लिए CHECK CONSTRAINT का अनुकरण करने के लिए जेनरेटेड कॉलम का उपयोग करना -

mysql> Alter table car2 add column number_validate char(0) as (case when number
rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
  -> then '' end)
  -> virtual not null;
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> Describe car2;
+-----------------+---------+------+-----+---------+-------------------+
| Field           | Type    | Null | Key | Default | Extra             |
+-----------------+---------+------+-----+---------+-------------------+
| number          | char(9) | YES  |     | NULL    |                   |
| number_validate | char(0) | NO   |     | NULL    | VIRTUAL GENERATED |
+-----------------+---------+------+-----+---------+-------------------+
2 rows in set (0.00 sec)

mysql> Insert into car2 (number) values('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)

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

mysql> Insert into car2 (number) values('AB-2X5-YZ');
ERROR 1048 (23000): Column 'number_validate' cannot be null

mysql> Update car2 set number='AB-2X5-YZ';
ERROR 1048 (23000): Column 'number_validate' cannot be null

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

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

  1. MySQL में परिवर्तन का उपयोग करके कॉलम कैसे जोड़ें?

    MySQL में परिवर्तन का उपयोग करके कॉलम जोड़ने का सिंटैक्स निम्नलिखित है: तालिका बदलें yourTableName कॉलम जोड़ें yourColumnName yourDataType डिफ़ॉल्ट yourValue; आइए पहले एक टेबल बनाएं: );क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.69 सेकंड) आइए हम DESC कमांड का उपयोग करके तालिका के विवरण की जाँच करें। य

  1. मैं MySQL में किसी तालिका में प्रत्येक कॉलम को कैसे हटा सकता हूं?

    MySQL में किसी तालिका के प्रत्येक कॉलम को हटाने के लिए, आप DROP TABLE कमांड का उपयोग कर सकते हैं। निम्नलिखित वाक्य रचना है: ड्रॉप टेबल yourTableName; आइए पहले एक टेबल बनाएं: टेबल बनाएं डेमोटेबल (StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName varchar(20), StudentLastName varcha