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

कैसे last_insert_rowid () SQLite में काम करता है

SQLite में last_insert_rowid() नामक एक फंक्शन होता है जो डेटाबेस कनेक्शन से अंतिम पंक्ति डालने का ROWID लौटाता है जिसने फ़ंक्शन को आमंत्रित किया था।

उदाहरण

यह दिखाने के लिए यहां एक उदाहरण दिया गया है कि कैसे last_insert_rowid() फ़ंक्शन SQLite में काम करता है।

सबसे पहले, आइए एक टेबल बनाएं और कुछ डेटा डालें:

CREATE TABLE Cats( 
    CatId INTEGER PRIMARY KEY, 
    CatName
);

INSERT INTO Cats VALUES 
    ( NULL, 'Brush' ),
    ( NULL, 'Scarcat' ),
    ( NULL, 'Flutter' );

यह स्वचालित रूप से प्रत्येक पंक्ति के लिए एक ROWID बनाएगा। इसलिए, इस SQL ​​​​कथन ने तीन अलग-अलग ROWID बनाए होंगे; 1, 2, और 3.

अब हम last_insert_rowid() . का उपयोग कर सकते हैं अंतिम ROWID का मान वापस करने के लिए कार्य करता है।

SELECT last_insert_rowid();

परिणाम:

3

जैसा कि अपेक्षित था, अंतिम ROWID 3 है।

किसी भिन्न तालिका में सम्मिलित करें

ध्यान दें कि last_insert_rowid() डेटाबेस कनेक्शन के आधार पर काम करता है, टेबल स्तर पर नहीं।

इसलिए, यदि मैं एक नई तालिका बनाता हूं, तो उस तालिका में पंक्तियां डालें, last_insert_rowid() मान उस . पर आधारित होगा इन्सर्ट ऑपरेशन।

CREATE TABLE Dogs( 
    DogId INTEGER PRIMARY KEY, 
    DogName
);

INSERT INTO Dogs VALUES 
    ( NULL, 'Yelp' ),
    ( NULL, 'Woofer' );

SELECT last_insert_rowid(); 

परिणाम:

2

एक साइड नोट के रूप में, जब मैंने टेबल बनाए, तो मैंने पहले कॉलम को ऑटोइनक्रिकमेंट कॉलम के रूप में परिभाषित किया। यह स्पष्ट रूप से परिभाषित किया गया था जब मैंने INTEGER PRIMARY KEY . का उपयोग किया था ।

इसलिए, जब मैं सभी पंक्तियों का चयन करता हूं, तो मैं देख सकता हूं कि अंतिम पंक्ति में last_insert_rowid() है। उस कॉलम में मान।

SELECT * FROM Dogs;

परिणाम:

DogId       DogName   
----------  ----------
1           Yelp      
2           Woofer    

SQLite में, INTEGER PRIMARY KEY प्रकार वाला कॉलम ROWID के लिए एक उपनाम है।

निम्न क्वेरी इसे प्रदर्शित करती है।

SELECT 
  rowid,
  * 
FROM Dogs;

परिणाम:

DogId       DogId       DogName   
----------  ----------  ----------
1           1           Yelp      
2           2           Woofer    

ध्यान दें कि इनबिल्ट SQLite ऑटोइनक्रिकमेंट फीचर का उपयोग किए बिना कॉलम बनाना संभव है। अगर आप ऐसा करते हैं, तो आपके “आईडी” कॉलम का मान ROWID मान से भिन्न हो सकता है।

अपने स्वयं के स्पष्ट मूल्य के साथ ऑटोइनक्रिकमेंट मान को ओवरराइड करना भी संभव है। हालांकि, इस मामले में, ROWID मान अभी भी इस स्पष्ट मान को प्रदर्शित करेगा।

INSERT INTO Dogs 
VALUES ( 789, 'Fluff' );

SELECT 
  rowid,
  * 
FROM Dogs;

SELECT last_insert_rowid();

परिणाम:

DogId       DogId       DogName   
----------  ----------  ----------
1           1           Yelp      
2           2           Woofer    
789         789         Fluff     

और हां, last_insert_rowid() यह नवीनतम ROWID मान भी प्रदर्शित करेगा।

SELECT last_insert_rowid();

परिणाम:

789

ROWID क्या है?

ROWID एक 64-बिट हस्ताक्षरित पूर्णांक कुंजी है जो विशिष्ट रूप से अपनी तालिका के भीतर पंक्ति की पहचान करती है। SQLite में सभी तालिकाओं में एक ROWID होता है जब तक कि तालिका को WITHOUT ROWID का उपयोग करके परिभाषित किया जाता है ।

ROWID मान को विशेष केस-स्वतंत्र नामों में से एक का उपयोग करके एक्सेस किया जा सकता है rowid , oid , या _rowid_ कॉलम नाम के स्थान पर। यदि किसी तालिका में उन नामों में से किसी एक का उपयोग करने वाला उपयोगकर्ता परिभाषित कॉलम होता है, तो वह नाम हमेशा स्पष्ट रूप से घोषित कॉलम को संदर्भित करता है और पूर्णांक ROWID मान को पुनर्प्राप्त करने के लिए उपयोग नहीं किया जा सकता है।

जब आप एक ऑटोइनक्रिकमेंट कॉलम वाली तालिका को परिभाषित करते हैं, तो वह कॉलम स्वचालित रूप से अपनी पंक्ति के लिए ROWID मान का उपयोग करता है।

अधिक जानकारी के लिए देखें कि 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. android.database.CursorIndexOutOfBoundsException

  2. SQLite में किसी तालिका में जेनरेट किया गया कॉलम जोड़ें

  3. SQLite प्राथमिक कुंजी

  4. SQLite विशिष्ट का चयन करें

  5. SQLite में एक निर्दिष्ट सीमा के भीतर एक यादृच्छिक संख्या कैसे उत्पन्न करें?