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