SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

SQLite जाँच की कमी

सारांश :इस ट्यूटोरियल में, आप सीखेंगे कि 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 . का उपयोग कैसे किया जाता है कॉलम या कॉलम के समूह में मान सुनिश्चित करने के लिए बाधा एक अभिव्यक्ति द्वारा परिभाषित एक शर्त को पूरा करती है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite डेटाबेस में डालें android

  2. क्या हर बार एप्लिकेशन शुरू होने पर SQLite टेबल बनाना वाकई जरूरी है?

  3. SQLite में सभी अस्थायी तालिकाओं की सूची बनाएं

  4. SQLiteException:तालिका पहले से मौजूद है

  5. Android कक्ष डेटाबेस सभी डेटा निर्यात नहीं करेगा