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

MySQL GENERATED COLUMN का उपयोग करके CHECK CONSTRAINT का अनुकरण कैसे करें?


जैसा कि हम जानते हैं कि MySQL रेफरेंशियल इंटीग्रिटी के लिए फॉरेन की सपोर्ट करता है लेकिन CHECK कंस्ट्रेन्ट सपोर्ट नहीं करता। लेकिन हम ट्रिगर्स का उपयोग करके उनका अनुकरण कर सकते हैं। इसे नीचे दिए गए उदाहरण से समझा जा सकता है:

उदाहरण

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

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 का अनुकरण करने के लिए GENERATED COLUMN का उपयोग (इंसर्ट और अपडेट के लिए):

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

व्याख्या: वर्चुअल जनरेटेड कॉलम `number_validate` शर्त पूरी होने पर खाली स्ट्रिंग ('') देता है, अन्यथा NULL। NOT NULL कंस्ट्रेन्ट NULL को अस्वीकार करता है, जिससे अमान्य डेटा ब्लॉक हो जाता है। यह ट्रिगर्स से सरल है और MySQL 5.7+ में काम करता है।

  1. - MySQL में टेबल पर CHECK कंस्ट्रेंट कैसे जोड़ें?

    MySQL 8.0.16+ CHECK कंस्ट्रेंट का पूर्ण समर्थन करता है। पुराने संस्करण इसे पार्स करते हैं लेकिन लागू नहीं करते। सिंटैक्स CREATE TABLE table_name ( column1 datatype, column2 datatype, ... CHECK (condition) ); उदाहरण: आयु सीमा कंस्ट्रेंट ); Query OK, 0 rows affected (0.55 sec) नामि

  1. - MySQL में ALTER TABLE से कॉलम कैसे जोड़ें?

    ALTER TABLE ADD COLUMN सिंटैक्स MySQL में मौजूदा टेबल में नया कॉलम जोड़ने के लिए ALTER TABLE ... ADD COLUMN स्टेटमेंट का उपयोग करें। सिंटैक्स ALTER TABLE yourTableName ADD COLUMN yourColumnName yourDataType DEFAULT yourValue; चरण-दर-चरण उदाहरण मूल टेबल बनाएं: ); टेबल संरचना जांचें: DESC alter

  1. - MySQL में टेबल के सभी कॉलम कैसे हटाएं?

    DROP TABLE का उपयोग करके पूरी टेबल हटाना MySQL में किसी टेबल के सभी कॉलम हटाने का सबसे सरल तरीका पूरी टेबल को ही ड्रॉप करना है। सिंटैक्स DROP TABLE yourTableName; उदाहरण 1. टेबल बनाना CREATE TABLE DemoTable ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName VARCHAR(20)