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

SQLite ऑटोइनक्रिमेंट

सारांश :इस ट्यूटोरियल में, आप 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 fullCode language: SQL (Structured Query Language) (sql)

आपको AUTOINCREMENT का उपयोग कब करना चाहिए कॉलम विशेषता?

विशेषता का उपयोग करने का मुख्य उद्देश्य AUTOINCREMENT SQLite को उस मान का पुन:उपयोग करने से रोकने के लिए है जिसका उपयोग नहीं किया गया है या पहले हटाई गई पंक्ति से मान है।

यदि आपके पास इस तरह की कोई आवश्यकता नहीं है, तो आपको AUTOINCREMENT का उपयोग नहीं करना चाहिए प्राथमिक कुंजी में विशेषता।

इस ट्यूटोरियल में, आपने सीखा कि कैसे SQLite AUTOINCREMENT विशेषता काम करती है और यह कैसे प्रभावित करती है कि SQLite प्राथमिक कुंजी कॉलम में मान निर्दिष्ट करता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Developer और ADO.Net डेटा प्रदाता अब Entity Framework Core 5 का समर्थन करते हैं

  2. SQLite डेटाबेस लीक पाया गया

  3. execSQL:बाइंडर्ग बेहतर है?

  4. SQLite मिन () कैसे काम करता है

  5. SQLite में महीने के नाम से ऑर्डर कैसे करें