सारांश :इस ट्यूटोरियल में, आप SQLite AUTOINCREMENT
. के बारे में जानेंगे column विशेषता और इसे अपनी तालिका में कब उपयोग करना है।
SQLite का परिचय ROWID
टेबल
जब भी आप WITHOUT ROWID
निर्दिष्ट किए टेबल बनाते हैं विकल्प, आपको एक निहित ऑटो-इन्क्रीमेंट कॉलम मिलता है जिसे rowid
. कहा जाता है . rowid
कॉलम स्टोर 64-बिट हस्ताक्षरित पूर्णांक जो विशिष्ट रूप से तालिका में एक पंक्ति की पहचान करता है।
आइए निम्नलिखित उदाहरण देखें।
सबसे पहले, people
. नाम की एक नई तालिका बनाएं जिसमें दो कॉलम हैं:first_name,
और last_name
:
CREATE TABLE people (
first_name TEXT NOT NULL,
last_name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
दूसरा, people
. में एक पंक्ति डालें निम्नलिखित INSERT
का उपयोग कर तालिका कथन:
INSERT INTO people (first_name, last_name)
VALUES('John', 'Doe');
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
तीसरा, people
. से क्वेरी डेटा निम्न का उपयोग कर तालिका SELECT
कथन:
SELECT
rowid,
first_name,
last_name
FROM
people;
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
जैसा कि आप आउटपुट से स्पष्ट रूप से देख सकते हैं, SQLite परोक्ष रूप से rowid
. नामक एक कॉलम बनाता है और जब भी आप तालिका में कोई नई पंक्ति डालते हैं तो स्वचालित रूप से एक पूर्णांक मान निर्दिष्ट करता है।
ध्यान दें कि आप rowid
. का भी उल्लेख कर सकते हैं इसके उपनामों का उपयोग करते हुए कॉलम:_rowid_
और oid
।
जब आप एक टेबल बनाते हैं जिसमें INTEGER PRIMARY KEY
. है कॉलम, यह कॉलम rowid
. का उपनाम है कॉलम।
निम्न कथन तालिका people
. को छोड़ देता है और इसे फिर से बनाता है। हालांकि, इस बार हम person_id
. नाम का एक और कॉलम जोड़ते हैं जिसका डेटा प्रकार INTEGER
है और स्तंभ बाधा PRIMARY KEY
है :
DROP TABLE people;
CREATE TABLE people (
person_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
इस मामले में, person_id
कॉलम वास्तव में rowid
है कॉलम।
SQLite rowid
को एक पूर्णांक मान कैसे निर्दिष्ट करता है? कॉलम?
यदि आप rowid
निर्दिष्ट नहीं करते हैं मान या आप NULL
. का उपयोग करते हैं जब आप एक नई पंक्ति सम्मिलित करते हैं, तो SQLite स्वचालित रूप से अगला अनुक्रमिक पूर्णांक निर्दिष्ट करता है, जो कि सबसे बड़े rowid
से एक बड़ा होता है। तालिका में। rowid
मान 1 से शुरू होता है।
rowid
. का अधिकतम मान कॉलम है 9,223,372,036,854,775,807
, जो बहुत बड़ा है। यदि आपका डेटा इस अधिकतम मान तक पहुंचता है और आप एक नई पंक्ति डालने का प्रयास करते हैं, तो SQLite एक अप्रयुक्त पूर्णांक ढूंढेगा और इसका उपयोग करेगा। यदि SQLite को कोई अप्रयुक्त पूर्णांक नहीं मिल रहा है, तो यह एक SQLITE_FULL
जारी करेगा त्रुटि। उसके ऊपर, यदि आप कुछ पंक्तियों को हटाते हैं और एक नई पंक्ति सम्मिलित करते हैं, तो SQLite rowid
का पुन:उपयोग करने का प्रयास करेगा हटाई गई पंक्तियों से मान।
आइए इसका परीक्षण करें।
सबसे पहले, people
. में अधिकतम मान वाली एक पंक्ति डालें टेबल।
INSERT INTO people (person_id,first_name,last_name)
VALUES( 9223372036854775807,'Johnathan','Smith');
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
दूसरा, person_id
. के लिए कोई मान निर्दिष्ट किए बिना दूसरी पंक्ति डालें कॉलम:
INSERT INTO people (first_name,last_name)
VALUES('William','Gate');
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
जैसा कि आउटपुट में स्पष्ट रूप से दिखाया गया है, नई पंक्ति को एक अप्रयुक्त पूर्णांक प्राप्त हुआ।
एक अन्य उदाहरण पर विचार करें।
सबसे पहले, t1
. नाम की एक नई तालिका बनाएं जिसमें एक कॉलम है:
CREATE TABLE t1(c text);
Code language: SQL (Structured Query Language) (sql)
दूसरा, t1
. में कुछ पंक्तियाँ डालें टेबल:
INSERT INTO t1(c) VALUES('A');
INSERT INTO t1(c) values('B');
INSERT INTO t1(c) values('C');
INSERT INTO t1(c) values('D');
Code language: SQL (Structured Query Language) (sql)
तीसरा, t1
. से क्वेरी डेटा टेबल:
SELECT rowid, c FROM t1;
Code language: SQL (Structured Query Language) (sql)
चौथा, t1
. की सभी पंक्तियों को हटा दें टेबल:
DELETE FROM t1;
Code language: SQL (Structured Query Language) (sql)
पांचवां, t1
. में कुछ पंक्तियां डालें टेबल:
INSERT INTO t1(c) values('E');
INSERT INTO t1(c) values('F');
INSERT INTO t1(c) values('G');
Code language: SQL (Structured Query Language) (sql)
अंत में, t1
. से डेटा क्वेरी करें टेबल:
SELECT rowid, c FROM t1;
Code language: SQL (Structured Query Language) (sql)
जैसा कि आप देख सकते हैं, नई पंक्तियों के लिए पंक्ति 1, 2 और 3 का पुन:उपयोग किया गया है।
SQLite AUTOINCREMENT
स्तंभ विशेषता
SQLite अनुशंसा करता है कि आपको AUTOINCREMENT
. का उपयोग नहीं करना चाहिए विशेषता क्योंकि:
AUTOINCREMENT
कीवर्ड अतिरिक्त CPU, मेमोरी, डिस्क स्थान और डिस्क I/O ओवरहेड लगाता है और यदि कड़ाई से आवश्यकता न हो तो इसे टाला जाना चाहिए। आमतौर पर इसकी आवश्यकता नहीं होती है।
इसके अलावा, जिस तरह से SQLite AUTOINCREMENT
के लिए एक मान निर्दिष्ट करता है कॉलम rowid
. के तरीके से थोड़ा अलग है कॉलम।
निम्नलिखित उदाहरण पर विचार करें।
सबसे पहले, people
को छोड़ें और फिर से बनाएं टेबल। इस बार, हम AUTOINCREMENT
. का उपयोग करते हैं विशेषता कॉलम:
DROP TABLE people;
CREATE TABLE people (
person_id INTEGER PRIMARY KEY AUTOINCREMENT,
first_name text NOT NULL,
last_name text NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
दूसरा, अधिकतम rowid
. के साथ एक पंक्ति डालें people
. में मान टेबल।
INSERT INTO people (person_id,first_name,last_name)
VALUES(9223372036854775807,'Johnathan','Smith');
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
तीसरा, people
. में एक और पंक्ति डालें टेबल।
INSERT INTO people (first_name,last_name)
VALUES('John','Smith');
Code language: SQL (Structured Query Language) (sql)
इसे आज़माएं
इस बार, SQLite ने एक त्रुटि संदेश जारी किया क्योंकि person_id
कॉलम ने rowid
जैसी संख्या का पुन:उपयोग नहीं किया कॉलम।
[Err] 13 - database or disk is full
Code language: SQL (Structured Query Language) (sql)
आपको AUTOINCREMENT
का उपयोग कब करना चाहिए कॉलम विशेषता?
विशेषता का उपयोग करने का मुख्य उद्देश्य AUTOINCREMENT
SQLite को उस मान का पुन:उपयोग करने से रोकने के लिए है जिसका उपयोग नहीं किया गया है या पहले हटाई गई पंक्ति से मान है।
यदि आपके पास इस तरह की कोई आवश्यकता नहीं है, तो आपको AUTOINCREMENT
का उपयोग नहीं करना चाहिए प्राथमिक कुंजी में विशेषता।
इस ट्यूटोरियल में, आपने सीखा कि कैसे SQLite AUTOINCREMENT
विशेषता काम करती है और यह कैसे प्रभावित करती है कि SQLite प्राथमिक कुंजी कॉलम में मान निर्दिष्ट करता है।