सारांश :इस ट्यूटोरियल में, आप सीखेंगे कि SQLite का उपयोग कैसे करें CHECK
डालने या अपडेट करने से पहले डेटा को मान्य करने के लिए बाधा।
SQLite का परिचय CHECK
बाधाएं
SQLite CHECK
जब भी वे किसी कॉलम में डाले जाते हैं या अपडेट किए जाते हैं, तो आप मूल्यों का परीक्षण करने के लिए एक्सप्रेशन को परिभाषित कर सकते हैं।
यदि मान व्यंजक द्वारा परिभाषित मानदंडों को पूरा नहीं करते हैं, तो SQLite एक बाधा उल्लंघन जारी करेगा और कथन को निरस्त कर देगा।
CHECK
बाधाएं आपको UNIQUE
. से परे अतिरिक्त डेटा अखंडता जांच को परिभाषित करने की अनुमति देती हैं या NOT NULL
आपके विशिष्ट आवेदन के अनुरूप।
SQLite आपको CHECK
. परिभाषित करने की अनुमति देता है स्तंभ स्तर या तालिका स्तर पर बाधा।
निम्नलिखित कथन दिखाता है कि CHECK
को कैसे परिभाषित किया जाए स्तंभ स्तर पर बाधा:
CREATE TABLE table_name(
...,
column_name data_type CHECK(expression),
...
);
Code language: SQL (Structured Query Language) (sql)
और निम्न कथन बताता है कि CHECK
. को कैसे परिभाषित किया जाए तालिका स्तर पर बाधा:
CREATE TABLE table_name(
...,
CHECK(expression)
);
Code language: SQL (Structured Query Language) (sql)
इस सिंटैक्स में, जब भी किसी पंक्ति को किसी तालिका में सम्मिलित किया जाता है या किसी मौजूदा पंक्ति को अद्यतन किया जाता है, तो प्रत्येक CHECK
से संबद्ध व्यंजक बाधा का मूल्यांकन किया जाता है और एक संख्यात्मक मान 0 या 1 लौटाया जाता है।
यदि परिणाम शून्य है, तो एक बाधा उल्लंघन हुआ। यदि परिणाम एक गैर-शून्य मान या NULL है, तो इसका मतलब है कि कोई बाधा उल्लंघन नहीं हुआ है।
ध्यान दें कि CHECK
. की अभिव्यक्ति बाधा में एक सबक्वेरी नहीं हो सकती।
SQLite CHECK
बाधा उदाहरण
आइए CHECK
. का उपयोग करने के कुछ उदाहरण लेते हैं बाधाएं।
1) SQLite का उपयोग करना CHECK
स्तंभ स्तर उदाहरण पर बाधा
निम्न कथन contacts
. नामक एक नई तालिका बनाता है :
CREATE TABLE contacts (
contact_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT,
phone TEXT NOT NULL
CHECK (length(phone) >= 10)
);
Code language: SQL (Structured Query Language) (sql)
contacts
. में टेबल, phone
कॉलम में एक CHECK
है बाधा:
CHECK (length(phone) >= 10)
Code language: SQL (Structured Query Language) (sql)
यह CHECK
बाधा यह सुनिश्चित करती है कि phone
. में मान कॉलम कम से कम 10 वर्णों का होना चाहिए।
यदि आप निम्नलिखित कथन को निष्पादित करने का प्रयास करते हैं, तो आपको एक बाधा उल्लंघन त्रुटि मिलेगी:
INSERT INTO contacts(first_name, last_name, phone)
VALUES('John','Doe','408123456');
Code language: SQL (Structured Query Language) (sql)
यहाँ त्रुटि संदेश है:
Result: CHECK constraint failed: contacts
Code language: SQL (Structured Query Language) (sql)
इसका कारण यह था कि जिस फ़ोन नंबर को आपने डालने का प्रयास किया था उसमें केवल 9 वर्ण हैं जबकि इसके लिए कम से कम 10 वर्णों की आवश्यकता है।
निम्न कथन कार्य करना चाहिए क्योंकि phone
. में मान कॉलम में 13 वर्ण हैं, जो CHECK
. में दिए गए व्यंजक को संतुष्ट करते हैं बाधा:
INSERT INTO contacts(first_name, last_name, phone)
VALUES('John','Doe','(408)-123-456');
Code language: SQL (Structured Query Language) (sql)
2) SQLite का उपयोग करना CHECK
तालिका स्तर के उदाहरण पर बाधाएं
निम्नलिखित कथन products
. नामक एक नई तालिका बनाता है :
CREATE TABLE products (
product_id INTEGER PRIMARY KEY,
product_name TEXT NOT NULL,
list_price DECIMAL (10, 2) NOT NULL,
discount DECIMAL (10, 2) NOT NULL
DEFAULT 0,
CHECK (list_price >= discount AND
discount >= 0 AND
list_price >= 0)
);
Code language: SQL (Structured Query Language) (sql)
इस उदाहरण में, CHECK
बाधा को तालिका स्तर पर परिभाषित किया गया है:
CHECK (list_price >= discount AND
discount >= 0 AND
list_price >= 0)
Code language: SQL (Structured Query Language) (sql)
CHECK
बाधा यह सुनिश्चित करती है कि सूची मूल्य हमेशा छूट के बराबर या अधिक हो और छूट और सूची मूल्य दोनों अधिक या शून्य के बराबर हों।
निम्नलिखित कथन CHECK
. का उल्लंघन करता है बाधा है क्योंकि छूट सूची मूल्य से अधिक है।
INSERT INTO products(product_name, list_price, discount)
VALUES('New Product',900,1000);
Code language: SQL (Structured Query Language) (sql)
निम्नलिखित कथन CHECK
. का भी उल्लंघन करता है बाधा है क्योंकि छूट नकारात्मक है:
INSERT INTO products(product_name, list_price, discount)
VALUES('New XFactor',1000,-10);
Code language: SQL (Structured Query Language) (sql)
CHECK
जोड़ना मौजूदा तालिका में बाधाएं
संस्करण 3.25.2 के अनुसार, SQLite CHECK
. जोड़ने का समर्थन नहीं करता है मौजूदा तालिका के लिए बाधा।
हालांकि, आप इन चरणों का पालन कर सकते हैं:
सबसे पहले, एक नई तालिका बनाएं जिसकी संरचना उस तालिका के समान हो जिसमें आप CHECK
जोड़ना चाहते हैं बाधा नई तालिका में CHECK
. भी शामिल होना चाहिए बाधा:
CREATE TABLE new_table (
[...],
CHECK ([...])
);
Code language: SQL (Structured Query Language) (sql)
पुरानी तालिका की संरचना प्राप्त करने के लिए, आप .schema
. का उपयोग कर सकते हैं आज्ञा। अधिक जानकारी के लिए SQLite DESCRIBE तालिका ट्यूटोरियल देखें।
दूसरा, पुरानी तालिका से नई तालिका में डेटा कॉपी करें।
INSERT INTO new_table SELECT * FROM old_table;
Code language: SQL (Structured Query Language) (sql)
तीसरा, पुरानी तालिका छोड़ें:
DROP TABLE old_table;
Code language: SQL (Structured Query Language) (sql)
चौथा, नई तालिका का नाम बदलकर पुराने रख दें:
ALTER TABLE new_table RENAME TO old_table;
Code language: SQL (Structured Query Language) (sql)
लेन-देन से ऊपर के सभी बयानों को सुरक्षित बनाने के लिए, आपको उन सभी को इस तरह के लेन-देन के भीतर निष्पादित करना चाहिए:
BEGIN;
-- create a new table
CREATE TABLE new_table (
[...],
CHECK ([...])
);
-- copy data from old table to the new one
INSERT INTO new_table SELECT * FROM old_table;
-- drop the old table
DROP TABLE old_table;
-- rename new table to the old one
ALTER TABLE new_table RENAME TO old_table;
-- commit changes
COMMIT;
Code language: SQL (Structured Query Language) (sql)
इस ट्यूटोरियल में, आपने सीखा है कि SQLite CHECK
. का उपयोग कैसे किया जाता है कॉलम या कॉलम के समूह में मान सुनिश्चित करने के लिए बाधा एक अभिव्यक्ति द्वारा परिभाषित एक शर्त को पूरा करती है।