SQLite INSERT, UPDATE, DELETE क्वेरी उदाहरण सहित
डेटा संशोधन खंड SQLite INSERT, UPDATE और DELETE कथन हैं। इसका उपयोग नई पंक्तियाँ सम्मिलित करने, मौजूदा मानों को अपडेट करने या डेटाबेस से पंक्तियाँ हटाने के लिए किया जाता है।
ध्यान दें कि, निम्नलिखित सभी उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस से कनेक्शन खोलना होगा:
चरण 1) इस चरण में,
- मेरा कंप्यूटर खोलें और निम्नलिखित निर्देशिका पर जाएँ “सी:\sqlite" तथा
- फिर खोलें “sqlite3.exe"
चरण 2) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db"निम्न आदेश द्वारा:
.open TutorialsSampleDB.db
अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।
SQLite सम्मिलित करें
SQLite INSERT का उपयोग डेटाबेस की निर्दिष्ट तालिका में रिकॉर्ड डालने के लिए किया जाता है। आपको 'INSERT' क्लॉज़ का उपयोग करना होगा। INSERT क्लॉज़ का सिंटैक्स इस प्रकार है:
- INSERT क्लॉज के बाद, आपको यह बताना चाहिए कि आपको मान किस तालिका में सम्मिलित करने हैं।
- तालिका नाम के बाद आप उन स्तंभों की सूची लिखते हैं, जिनमें आप मान सम्मिलित करना चाहते हैं।
- आप कॉलम के नाम को अनदेखा कर सकते हैं और उनमें कुछ भी नहीं लिख सकते हैं।
- यदि आप स्तंभ का नाम नहीं लिखते हैं, तो मान तालिका में पाए जाने वाले सभी स्तंभों में उसी क्रम से डाले जाएंगे, स्तंभ तालिका में परिभाषित हैं।
- VALUES क्लॉज़ के बाद, आपको सम्मिलित किए जाने वाले मानों की सूची बनानी चाहिए।
- प्रत्येक INSERT क्लॉज़ केवल एक पंक्ति सम्मिलित करता है। यदि आप कई पंक्तियाँ सम्मिलित करना चाहते हैं, तो आपको प्रत्येक पंक्ति के लिए एक, कई INSERT क्लॉज़ लिखने चाहिए।
SQLite उदाहरण डालें
निम्नलिखित उदाहरण में, हम students तालिका में 2 पंक्तियाँ डालेंगे, प्रत्येक छात्र के लिए एक:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
यह सफलतापूर्वक चलना चाहिए और इसका कोई आउटपुट नहीं है:
इससे दो छात्र सम्मिलित होंगे:
- पहला छात्र, StudentId=11, StudentName = Ahmed, DepartmentId = 4, तथा DateOfBirth = 1997-10-12.
- दूसरा छात्र जिसका StudentId=12, StudentName = Aly, DepartmentId = 4, तथा DateOfBirth = 1996-10-12′ है।
पहले कथन में, हमने कॉलम के नाम सूचीबद्ध किए हैं “छात्र आईडी, छात्र का नाम, विभाग आईडी, जन्म तिथि“हालाँकि, दूसरे बयान में हमने ऐसा नहीं किया।
चार मूल्य “12, 'ऐली', 4, '1996-10-12'” को स्टूडेंट्स तालिका के सभी चार स्तंभों में उसी क्रम में डाला जाएगा जिस क्रम में स्तंभ परिभाषित हैं।
अब, निम्नलिखित चलाकर सत्यापित करें कि दो छात्रों को छात्र तालिका में डाला गया था सवाल:
SELECT * FROM Students;
फिर आपको उस क्वेरी से लौटे दो छात्रों को इस प्रकार देखना चाहिए:
SQLite अपडेट
SQLite UPDATE क्वेरी का उपयोग किसी तालिका में मौजूदा रिकॉर्ड को संशोधित करने के लिए किया जाता है। आप चयनित पंक्तियों को अपडेट करने के लिए UPDATE क्वेरी के साथ WHERE क्लॉज का उपयोग कर सकते हैं। UPDATE क्लॉज किसी विशिष्ट कॉलम के लिए मान बदलकर तालिका को अपडेट करता है। UPDATE क्लॉज का सिंटैक्स निम्नलिखित है:
के रूप में निम्नानुसार:
- “अपडेट क्लॉज” के बाद, आपको अपडेट करने के लिए तालिका का नाम लिखना चाहिए।
- आपको “SET क्लॉज” लिखना होगा जिसका उपयोग अपडेट करने के लिए कॉलम का नाम और अपडेट किए जाने वाले मान को लिखने के लिए किया जाता है।
- आप एक से ज़्यादा कॉलम अपडेट कर सकते हैं। आप हर लाइन के बीच में कॉमा का इस्तेमाल कर सकते हैं।
- आप केवल कुछ पंक्तियों को निर्दिष्ट करने के लिए WHERE क्लॉज़ निर्दिष्ट कर सकते हैं। केवल वे पंक्तियाँ अपडेट की जाती हैं जिनका मूल्यांकन अभिव्यक्ति सत्य के रूप में करती है। यदि आपने WHERE क्लॉज़ निर्दिष्ट नहीं किया है, तो सभी पंक्तियाँ अपडेट हो जाएँगी।
SQLite अद्यतन उदाहरण
निम्नलिखित अद्यतन विवरण में, हम StudentId = 6 वाले छात्र के लिए DepartmentId को अद्यतन करके 3 कर देंगे:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
यह सफलतापूर्वक चलना चाहिए और आपको कोई आउटपुट नहीं मिलना चाहिए:
UPDATE क्लॉज में, हमने निर्दिष्ट किया कि हम Students तालिका को अद्यतन करना चाहते हैं।
- WHERE क्लॉज में, हमने सभी विद्यार्थियों को फ़िल्टर करके केवल StudentId = 6 वाली पंक्ति का चयन किया।
- SET क्लॉज चयनित छात्रों के लिए विभाग आईडी का मान 3 तक अद्यतन कर देगा।
अब, निम्नलिखित कमांड चलाकर सत्यापित करें कि ID 6 वाला छात्र अपडेट है:
SELECT * FROM Students WHERE StudentId = 6;
अब आप देखेंगे कि विभाग आईडी मान अब 3 है, जैसा कि निम्नलिखित है:
SQLite मिटाना
SQLite DELETE क्वेरी का उपयोग किसी निर्दिष्ट तालिका से मौजूदा रिकॉर्ड हटाने के लिए किया जाता है। आप चयनित पंक्तियों को हटाने के लिए DELETE क्वेरी के साथ WHERE क्लॉज़ का उपयोग कर सकते हैं।
DELETE क्लॉज़ का सिंटैक्स निम्नलिखित है:
- आपको DELETE FROM क्लॉज के बाद उस तालिका का नाम लिखना होगा, जिससे आप रिकॉर्ड हटाना चाहते हैं।नोट: कि डिलीट क्लॉज किसी टेबल से कुछ रिकॉर्ड हटाने या सभी रिकॉर्ड हटाने के लिए उपयोग किया जाता है और यह टेबल को स्वयं नहीं हटाएगा। हालाँकि, ड्रॉप क्लॉज (इसका उपयोग संपूर्ण तालिका को उसके सभी रिकॉर्डों सहित हटाने के लिए किया जाता है।)
- यदि आप DELETE क्लॉज़ को इस तरह लिखते हैं “DELETE FROM guru”, तो यह “guru” टेबल से सभी रिकॉर्ड हटा देगा।
- यदि आप कुछ विशिष्ट पंक्तियों को हटाना चाहते हैं, तो आप अभिव्यक्ति के साथ WHERE शर्त निर्दिष्ट कर सकते हैं। केवल वे पंक्तियाँ हटाई जाएँगी जिनके लिए अभिव्यक्ति सत्य का मूल्यांकन करती है। उदाहरण के लिए, “DELETE FROM guru WHERE id > 5” – यह केवल उन रिकॉर्ड्स को हटाएगा जिनकी id 5 से बड़ी है।
उदाहरण
निम्नलिखित कथन में, हम StudentId 11 और 12 वाले दो छात्रों को हटा देंगे:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
भाव "छात्र आईडी = 11 या छात्र आईडी = 12” केवल आईडी 11 और 12 वाले छात्रों के लिए सही होगा। इसलिए DELETE क्लॉज़ दोनों पर लागू होगा और केवल उन्हें ही हटाएगा।
यह कमांड सफलतापूर्वक चलना चाहिए और आपको निम्नलिखित जैसा कोई आउटपुट नहीं मिलना चाहिए:
आप निम्नलिखित तरीके से छात्र तालिका से सभी रिकॉर्ड का चयन करके सत्यापित कर सकते हैं कि दो छात्र हटा दिए गए हैं:
SELECT * FROM Students;
आपको आईडी 11 और 12 वाले दो छात्र इस प्रकार नहीं दिखाई देंगे:
SQLite संघर्ष खंड
मान लीजिए कि आपके पास एक ऐसा कॉलम है जिसमें निम्न कॉलम प्रतिबंध हैं: UNIQUE, NOT NULL, CHECK, या PRIMARY KEY. और फिर आपने उस कॉलम पर एक ऐसा मान डालने या अपडेट करने का प्रयास किया जो इस प्रतिबंध के साथ टकराव करता है.
उदाहरण के लिए, यदि किसी कॉलम में UNIQUE बाधा है और आपने पहले से मौजूद मान (एक डुप्लिकेट मान) डालने का प्रयास किया है, जो UNIQUE बाधा के साथ टकराव करता है। तब CONFLICT क्लॉज़ आपको यह चुनने देता है कि इस टकराव को हल करने के लिए ऐसे मामलों में क्या करना है।
इससे पहले कि हम यह समझाना जारी रखें कि CONFLICT क्लॉज़ संघर्ष को कैसे हल करता है। आपको यह समझना चाहिए कि डेटाबेस ट्रांजेक्शन क्या है।
डेटाबेस लेनदेन
डेटाबेस लेनदेन शब्द एक सूची है SQLite ऑपरेशन (इन्सर्ट या अपडेट या डिलीट)। डेटाबेस ट्रांजेक्शन को एक इकाई के रूप में निष्पादित किया जाना चाहिए, या तो सभी ऑपरेशन सफलतापूर्वक निष्पादित किए जाएं या बिल्कुल भी निष्पादित न किए जाएं। यदि उनमें से कोई एक निष्पादित करने में विफल रहता है, तो सभी ऑपरेशन रद्द कर दिए जाएंगे।
डेटाबेस लेनदेन का उदाहरण
एक बैंक खाते से दूसरे बैंक खाते में पैसे ट्रांसफर करने के लिए कई तरह की गतिविधियाँ करनी पड़ती हैं। इस लेनदेन में पहले खाते से पैसे निकालना और उसे दूसरे खाते में जमा करना शामिल है। यह लेनदेन पूरी तरह से पूरा होना चाहिए या पूरी तरह से रद्द होना चाहिए और बीच में ही विफल नहीं होना चाहिए।
यहां पांच प्रस्तावों की सूची दी गई है जिन्हें आप संघर्ष खंड में चुन सकते हैं:
- रोलबैक - यह उस लेनदेन को वापस ले लेगा जिसमें वर्तमान SQLite कथन जिसमें संघर्ष है (यह पूरे लेनदेन को रद्द कर देगा)। उदाहरण के लिए, यदि आप 10 पंक्तियों को अपडेट करने का प्रयास कर रहे हैं, और पांचवीं पंक्ति में एक ऐसा मान है जो किसी बाधा के साथ संघर्ष करता है, तो कोई भी पंक्ति अपडेट नहीं की जाएगी, 10 पंक्तियाँ वही रहेंगी। एक त्रुटि फेंक दी जाएगी।
- गर्भपात - यह वर्तमान को निरस्त (रद्द) कर देगा SQLite केवल वही कथन अपडेट किया जाएगा जिसमें संघर्ष है और लेनदेन रद्द नहीं किया जाएगा। उदाहरण के लिए, यदि आप 10 पंक्तियों को अपडेट करने का प्रयास कर रहे हैं, और पाँचवीं पंक्ति में ऐसा मान है जो किसी बाधा के साथ संघर्ष करता है, तो केवल पाँचवाँ मान अपडेट नहीं किया जाएगा, लेकिन अन्य 9 पंक्तियाँ अपडेट की जाएँगी। एक त्रुटि फेंकी जाएगी।
- असफल - वर्तमान को निरस्त करता है SQLite कथन जिसमें संघर्ष है। हालाँकि, लेन-देन जारी नहीं रहेगा, लेकिन संघर्ष वाली पंक्ति से पहले की पंक्तियों में किए गए पिछले परिवर्तन प्रतिबद्ध होंगे। उदाहरण के लिए, यदि आप 10 पंक्तियों को अपडेट करने का प्रयास कर रहे हैं, और पाँचवीं पंक्ति में एक मान है जो किसी बाधा के साथ संघर्ष करता है, तो केवल 4 पंक्तियाँ अपडेट होंगी और अन्य नहीं। एक त्रुटि फेंक दी जाएगी।
- ध्यान न दें - यह उस पंक्ति को छोड़ देगा जिसमें बाधा का उल्लंघन है और अन्य निम्नलिखित पंक्तियों को संसाधित करना जारी रखेगा SQLite कथन। उदाहरण के लिए, यदि आप 10 पंक्तियों को अपडेट करने का प्रयास कर रहे हैं, और पाँचवीं पंक्ति में ऐसा मान है जो किसी बाधा के साथ संघर्ष करता है, तो केवल 4 पंक्तियाँ अपडेट होंगी और अन्य नहीं। यह अन्य पंक्तियों को अपडेट करने के लिए आगे नहीं बढ़ेगा और उस पंक्ति पर रुक जाएगा जिसमें संघर्ष मान है। कोई त्रुटि नहीं फेंकी जाएगी।
- REPLACE - यह उस बाधा के प्रकार पर निर्भर करता है जिसका उल्लंघन किया गया है:
- जब UNIQUE या PRIMARY KEY प्रतिबंध के लिए प्रतिबंध का उल्लंघन होता है। REPLACE उस पंक्ति को नई सम्मिलित या अद्यतन पंक्ति से प्रतिस्थापित कर देगा जो उल्लंघन का कारण बनती है।
- जब NOT NULL प्रतिबंध का उल्लंघन होता है, तो REPLACE क्लॉज़ NULL मान को उस कॉलम के डिफ़ॉल्ट मान से बदल देगा। यदि कॉलम में कोई डिफ़ॉल्ट मान नहीं है, तो SQLite कथन निरस्त कर दिया जाएगा (बयान रद्द कर दिया जाएगा)
- यदि CHECK प्रतिबंध का उल्लंघन होता है, तो खंड निरस्त कर दिया जाएगा।
नोट: ऊपर दिए गए 5 समाधान इस बात के विकल्प हैं कि आप संघर्ष को कैसे हल करना चाहते हैं। यह ज़रूरी नहीं है कि एक संघर्ष को हल करने के लिए जो लागू है, वह दूसरे प्रकार के संघर्षों को हल करने के लिए भी लागू हो।
CONFLICT खंड की घोषणा कैसे करें
जब आप CREATE TABLE क्लॉज के भीतर कॉलम परिभाषा के लिए कोई बाधा परिभाषित करते हैं, तो आप ON CONFLICT क्लॉज घोषित कर सकते हैं। निम्नलिखित सिंटैक्स का उपयोग करके:
जैसा कि पहले बताया गया है, आप संघर्ष को हल करने के लिए पाँच समाधानों में से एक चुन सकते हैं।
संघर्ष पर ध्यान न दें उदाहरण
चरण 1) निम्नानुसार एक नया तालिका विषय बनाएं:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
ध्यान दें कि हमने SubjectId कॉलम पर एक PRIMARY KEY बाधा परिभाषित की है। प्राथमिक कुंजी बाधा SubjectId कॉलम में दो डुप्लिकेट मानों को सम्मिलित करने की अनुमति नहीं देगी ताकि उस कॉलम में सभी मान अद्वितीय हों। साथ ही, ध्यान दें कि हमने संघर्ष समाधान को “ध्यान न दें".
कमांड सफलतापूर्वक चलना चाहिए और आपको कोई त्रुटि नहीं मिलनी चाहिए:
चरण 2) अब, आइए नए तालिका विषयों में कुछ मान डालें, लेकिन ऐसे मान के साथ जो प्राथमिक कुंजी प्रतिबंध का उल्लंघन करता है:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
इन INSERT कथन में, हमने एक ही प्राथमिक कुंजी विषय आईडी 2 के साथ दो पाठ्यक्रम सम्मिलित करने का प्रयास किया, जो प्राथमिक कुंजी प्रतिबंध का उल्लंघन है।
कमांड ठीक से चलनी चाहिए और आपको कोई त्रुटि नहीं मिलनी चाहिए। जैसा कि निम्नलिखित है:
चरण 3) नीचे दी गई तालिका से सभी विषयों का चयन करें:
SELECT * FROM Subjects;
इससे आपको विषयों की सूची मिल जाएगी:
ध्यान दें कि केवल तीन विषय डाले गए थे “बीजगणित, डेटाबेस पाठ्यक्रम, और Algorithms” 4 पंक्तियों के बजाय.
वह पंक्ति जिसका मान प्राथमिक कुंजी बाधा का उल्लंघन करता है, जो कि "डेटा संरचना" है, उसे अनदेखा कर दिया गया और सम्मिलित नहीं किया गया। हालाँकि, SQLite उस पंक्ति के बाद अन्य कथनों का निष्पादन जारी रखता है।
चरण 4) निम्न आदेश चलाकर निम्न उदाहरण के लिए एक भिन्न ON CONFLICT खंड के साथ इसे पुनः बनाने के लिए तालिका विषयों को हटाएं:
DROP TABLE Subjects;
ड्रॉप कमांड संपूर्ण तालिका को हटा देता है। अब तालिका विषय मौजूद नहीं है।
संघर्ष प्रतिस्थापन उदाहरण
चरण 1) निम्नानुसार एक नया तालिका विषय बनाएं:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
ध्यान दें कि हमने SubjectId कॉलम पर PRIMARY KEY कंस्ट्रेंट परिभाषित किया है। प्राथमिक कुंजी कंस्ट्रेंट SubjectId कॉलम में दो डुप्लिकेट मानों को सम्मिलित करने की अनुमति नहीं देगा, ताकि उस कॉलम में सभी मान अद्वितीय हों।
इसके अलावा, ध्यान दें कि हमने संघर्ष समाधान विकल्प को " चुना हैREPLACE“. कमांड सफलतापूर्वक चलना चाहिए और आपको कोई त्रुटि नहीं मिलनी चाहिए:
चरण 2) अब, आइए नई तालिका Subjects में कुछ मान डालें, लेकिन ऐसे मान के साथ जो प्राथमिक कुंजी प्रतिबंध का उल्लंघन करता है:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
इन INSERT कथन में, हमने एक ही प्राथमिक कुंजी विषय आईडी 2 के साथ दो पाठ्यक्रम सम्मिलित करने का प्रयास किया, जो प्राथमिक कुंजी प्रतिबंध का उल्लंघन है।
कमांड ठीक से चलनी चाहिए और आपको कोई त्रुटि नहीं मिलनी चाहिए। जैसा कि निम्नलिखित है:
चरण 3) नीचे दी गई तालिका से सभी विषयों का चयन करें:
SELECT * FROM Subjects;
इससे आपको विषयों की सूची मिल जाएगी:
ध्यान दें कि केवल तीन विषय डाले गए थे “बीजगणित, डेटा संरचनाएं, और Algorithms” जबकि हमने 4 पंक्तियाँ सम्मिलित करने का प्रयास किया।
वह पंक्ति जिसका मान प्राथमिक कुंजी प्रतिबंध का उल्लंघन करता है, जो है “डेटा संरचनाएं” मान को प्रतिस्थापित किया गया “डेटाबेस कोर्स" के रूप में निम्नानुसार:
- पहले दो इन्सर्ट स्टेटमेंट बिना किसी समस्या के ठीक से चलते हैं। दो विषय बीजगणित, और डेटाबेस कोर्स आईडी 1, 2 के साथ डाले जाएंगे।
- . SQLite SubjectId 2 और SubjectName के साथ तीसरा इन्सर्ट स्टेटमेंट चलाने की कोशिश करता है “डेटा संरचनाएं“, यह पता लगाता है कि SubjectId = 2 वाला एक विषय पहले से ही मौजूद है। जो SubjectId कॉलम पर परिभाषित प्राथमिक कुंजी बाधा का उल्लंघन है।
- SQLite इस संघर्ष के लिए REPLACE समाधान का चयन करेगा। यह सब्जेक्ट्स टेबल में पहले से मौजूद मान को इन्सर्ट स्टेटमेंट से नए मान से बदल देता है। तो, “डेटाबेस कोर्स” विषयनाम को “ से प्रतिस्थापित किया जाएगाडेटा संरचनाएं" विषय नाम।
सारांश
INSERT, UPDATE और DELETE क्लॉज का उपयोग डेटा को संशोधित करने के लिए किया जाता है SQLite डेटाबेसCONFLICT क्लॉज डेटा और संशोधित किए जाने वाले डेटा के बीच किसी भी संघर्ष को हल करने के लिए एक शक्तिशाली क्लॉज है।