SQLite उदाहरण के साथ ट्रिगर, दृश्य और अनुक्रमणिका
के दैनिक उपयोग में SQLite, आपको अपने डेटाबेस पर कुछ प्रशासनिक उपकरणों की आवश्यकता होगी। आप उनका उपयोग इंडेक्स बनाकर डेटाबेस को अधिक कुशलता से क्वेरी करने के लिए या दृश्य बनाकर अधिक पुन: प्रयोज्य बनाने के लिए भी कर सकते हैं।
SQLite देखें
दृश्य तालिकाओं के बहुत समान हैं। लेकिन दृश्य तार्किक तालिकाएँ हैं; उन्हें तालिकाओं की तरह भौतिक रूप से संग्रहीत नहीं किया जाता है। एक दृश्य एक चयन कथन से बना होता है।
आप अपनी जटिल क्वेरीज़ के लिए एक दृश्य परिभाषित कर सकते हैं, और जब भी आप चाहें, क्वेरीज़ को दोबारा लिखने के बजाय सीधे दृश्य को कॉल करके इन क्वेरीज़ का पुनः उपयोग कर सकते हैं।
दृश्य बनाएं कथन
डेटाबेस पर दृश्य बनाने के लिए, आप CREATE VIEW कथन के बाद दृश्य नाम का उपयोग कर सकते हैं, और उसके बाद इच्छित क्वेरी डाल सकते हैं।
उदाहरण: निम्नलिखित उदाहरण में हम नाम के साथ एक दृश्य बनाएंगे “सभीछात्रदेखें” नमूना डेटाबेस में “ट्यूटोरियल्ससैंपलDB.db" के रूप में निम्नानुसार:
चरण 1) मेरा कंप्यूटर खोलें और निम्नलिखित निर्देशिका पर जाएँ “सी:\sqlite” और फिर खोलें “sqlite3.exe"
चरण 2) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db"निम्न आदेश द्वारा:
चरण 3) दृश्य बनाने के लिए sqlite3 कमांड का मूल सिंटैक्स निम्नलिखित है
CREATE VIEW AllStudentsView
AS
SELECT
s.StudentId,
s.StudentName,
s.DateOfBirth,
d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
इस कमांड से कोई आउटपुट इस प्रकार नहीं होना चाहिए:
चरण 4) यह सुनिश्चित करने के लिए कि दृश्य बनाया गया है, आप निम्न आदेश चलाकर डेटाबेस में दृश्यों की सूची का चयन कर सकते हैं:
SELECT name FROM sqlite_master WHERE type = 'view';
आपको यह दृश्य देखना चाहिए “सभीछात्रदेखें” लौटाया जाता है:
चरण 5) अब हमारा दृश्य तैयार हो गया है, आप इसे एक सामान्य तालिका के रूप में कुछ इस प्रकार उपयोग कर सकते हैं:
SELECT * FROM AllStudentsView;
यह कमांड “AllStudents” दृश्य को क्वेरी करेगा और उसमें से सभी पंक्तियों का चयन करेगा जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है:
अस्थायी दृश्य
अस्थायी दृश्य इसे बनाने के लिए उपयोग किए जाने वाले वर्तमान डेटाबेस कनेक्शन के लिए अस्थायी होते हैं। फिर यदि आप डेटाबेस कनेक्शन बंद करते हैं तो सभी अस्थायी दृश्य स्वचालित रूप से हटा दिए जाएंगे। अस्थायी दृश्य निम्न में से किसी एक कमांड का उपयोग करके बनाए जाते हैं:
- अस्थायी दृश्य बनाएं, या
- अस्थायी दृश्य बनाएं.
अस्थायी दृश्य तब उपयोगी होते हैं जब आप कुछ समय के लिए कुछ ऑपरेशन करना चाहते हैं और इसे स्थायी दृश्य बनाने की आवश्यकता नहीं है। तो, आप बस एक अस्थायी दृश्य बनाएं, फिर उस दृश्य का उपयोग करके अपनी प्रोसेसिंग करें। Later जब आप डेटाबेस से कनेक्शन बंद करेंगे, तो यह स्वचालित रूप से हटा दिया जाएगा।
उदाहरण:
निम्नलिखित उदाहरण में, हम एक डेटाबेस कनेक्शन खोलेंगे, फिर एक अस्थायी दृश्य बनाएंगे।
इसके बाद, हम उस कनेक्शन को बंद कर देंगे, और जांच करेंगे कि अस्थायी दृश्य अभी भी मौजूद है या नहीं।
चरण 1) निर्देशिका से sqlite3.exe खोलें “सी:\sqlite” जैसा कि पहले बताया गया है।
चरण 2) डेटाबेस से कनेक्शन खोलें “ट्यूटोरियल्ससैंपलDB.db” निम्नलिखित आदेश चलाकर:
.open TutorialsSampleDB.db
चरण 3) निम्नलिखित कमांड लिखें जो एक अस्थायी दृश्य बनाएगा “सभीछात्रअस्थायीदृश्य"
CREATE TEMP VIEW AllStudentsTempView
AS
SELECT
s.StudentId,
s.StudentName,
s.DateOfBirth,
d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
चरण 4) सुनिश्चित करें कि अस्थायी दृश्य “सभीछात्रअस्थायीदृश्य” निम्नलिखित कमांड चलाकर बनाया जाता है:
SELECT name FROM sqlite_temp_master WHERE type = 'view';
चरण 5) sqlite3.exe को बंद करें और पुनः खोलें।
चरण 6) डेटाबेस से कनेक्शन खोलें “ट्यूटोरियल्ससैंपलDB.db"निम्न आदेश द्वारा:
.open TutorialsSampleDB.db
चरण 7) डेटाबेस पर बनाए गए अस्थायी दृश्य की सूची प्राप्त करने के लिए निम्नलिखित कमांड चलाएँ:
SELECT name FROM sqlite_temp_master WHERE type = 'view';
आपको कोई आउटपुट नहीं दिखना चाहिए क्योंकि पिछले चरण में जब हमने डेटाबेस कनेक्शन बंद किया था, तो हमारे द्वारा बनाया गया अस्थायी दृश्य हटा दिया गया था। अन्यथा, जब तक आप डेटाबेस के साथ कनेक्शन को खुला रखते हैं, तब तक आप डेटा के साथ अस्थायी दृश्य देख पाएंगे।
टिप्पणियाँ:
- आप दृश्यों के साथ INSERT, DELETE, या UPDATE कथनों का उपयोग नहीं कर सकते हैं, केवल आप "दृश्यों से चयन करें" कमांड का उपयोग कर सकते हैं जैसा कि CREATE दृश्य उदाहरण में चरण 5 में दिखाया गया है।
- किसी VIEW को हटाने के लिए, आप “DROP VIEW” कथन का उपयोग कर सकते हैं:
DROP VIEW AllStudentsView;
यह सुनिश्चित करने के लिए कि दृश्य हटा दिया गया है, आप निम्नलिखित कमांड चला सकते हैं जो आपको डेटाबेस में दृश्यों की सूची देता है:
SELECT name FROM sqlite_master WHERE type = 'view';
आपको कोई दृश्य वापस नहीं मिलेगा क्योंकि दृश्य हटा दिया गया था, जैसा कि निम्नलिखित है:
SQLite सूची
अगर आपके पास कोई किताब है और आप उस किताब पर कोई कीवर्ड खोजना चाहते हैं, तो आप किताब के इंडेक्स में उस कीवर्ड को खोजेंगे। फिर आप उस कीवर्ड के पेज नंबर पर जाकर उस कीवर्ड के बारे में ज़्यादा जानकारी पढ़ सकते हैं।
हालाँकि, अगर उस किताब पर कोई इंडेक्स या पेज नंबर नहीं है, तो आप पूरी किताब को शुरू से लेकर आखिर तक स्कैन करेंगे जब तक आपको वह कीवर्ड न मिल जाए जिसे आप खोज रहे हैं। और यह बहुत मुश्किल है खासकर तब जब आपके पास इंडेक्स हो और कीवर्ड खोजने की प्रक्रिया बहुत धीमी हो।
अनुक्रमणिकाएँ SQLite (और यही अवधारणा अन्य के लिए भी मान्य है डेटाबेस प्रबंधन तंत्र (और साथ ही) पुस्तकों के पीछे पाए जाने वाले अनुक्रमणिकाओं के समान ही काम करता है।
जब आप किसी फ़ाइल में कुछ पंक्तियाँ खोजते हैं SQLite खोज मानदंड के साथ तालिका, SQLite तालिका की सभी पंक्तियों पर तब तक खोज करेगा जब तक कि उसे वह पंक्तियाँ न मिल जाएँ जिन्हें आप खोज रहे हैं और जो खोज मानदंड से मेल खाती हैं। और जब आपके पास बड़ी तालिकाएँ हों तो यह प्रक्रिया बहुत धीमी हो जाती है।
इंडेक्स डेटा के लिए खोज क्वेरी को गति देंगे और तालिकाओं से डेटा पुनर्प्राप्त करने में मदद करेंगे। इंडेक्स टेबल कॉलम पर परिभाषित किए जाते हैं।
इंडेक्स के साथ प्रदर्शन में सुधार:
इंडेक्स किसी टेबल पर डेटा खोजने के प्रदर्शन को बेहतर बना सकते हैं। जब आप किसी कॉलम पर इंडेक्स बनाते हैं, SQLite उस इंडेक्स के लिए एक डेटा संरचना बनाएगा जहां प्रत्येक फ़ील्ड मान के पास उस संपूर्ण पंक्ति का सूचक होगा जहां मान संबंधित है।
फिर, यदि आप किसी ऐसे कॉलम पर खोज शर्त के साथ कोई क्वेरी चलाते हैं जो किसी इंडेक्स का हिस्सा है, SQLite सबसे पहले सूचकांक पर मूल्य की तलाश करेगा। SQLite इसके लिए पूरी तालिका को स्कैन नहीं करेगा। फिर यह उस स्थान को पढ़ेगा जहाँ मान तालिका पंक्ति के लिए इंगित करता है। SQLite उस स्थान पर पंक्ति का पता लगाएगा और उसे पुनः प्राप्त करेगा।
हालाँकि, यदि आप जिस कॉलम को खोज रहे हैं, वह किसी इंडेक्स का हिस्सा नहीं है, SQLite आप जिस डेटा की तलाश कर रहे हैं उसे खोजने के लिए कॉलम मानों के लिए स्कैन करेगा। यदि कोई इंडेक्स नहीं है तो यह आमतौर पर एक धीमी प्रक्रिया होगी।
कल्पना करें कि एक किताब पर कोई अनुक्रमणिका नहीं है और आपको किसी खास शब्द को खोजना है। आप उस शब्द की तलाश में पूरी किताब को पहले पन्ने से लेकर आखिरी पन्ने तक स्कैन करेंगे। हालाँकि, अगर आपके पास उस किताब पर अनुक्रमणिका है, तो आप पहले उस पर शब्द की तलाश करेंगे। उस जगह का पेज नंबर लें जहाँ वह स्थित है, और फिर उस तक नेविगेट करें। जो पूरी किताब को कवर से कवर तक स्कैन करने से कहीं ज़्यादा तेज़ होगा।
SQLite पैदा करना
किसी कॉलम पर इंडेक्स बनाने के लिए, आपको CREATE INDEX कमांड का उपयोग करना चाहिए। और आपको इसे निम्न प्रकार से परिभाषित करना चाहिए:
- आपको CREATE INDEX कमांड के बाद इंडेक्स का नाम निर्दिष्ट करना होगा।
- इंडेक्स के नाम के बाद, आपको कीवर्ड “ON” डालना होगा, उसके बाद उस टेबल का नाम डालना होगा जिसमें इंडेक्स बनाया जाएगा।
- फिर सूचकांक के लिए उपयोग किए जाने वाले स्तंभ नामों की सूची।
- आप इंडेक्स डेटा को क्रमबद्ध करने के लिए उपयोग किए जाने वाले सॉर्ट क्रम को निर्दिष्ट करने के लिए किसी भी कॉलम नाम के बाद निम्नलिखित कीवर्ड “ASC” या “DESC” में से किसी एक का उपयोग कर सकते हैं।
उदाहरण:
निम्नलिखित उदाहरण में, हम एक इंडेक्स बनाएंगे “छात्रनामसूचकांक” छात्रों की मेज पर “छात्र” डेटाबेस में निम्नलिखित जानकारी दी गई है:
चरण 1) फ़ोल्डर पर नेविगेट करें “सी:\sqlite” जैसा कि पहले बताया गया है।
चरण 2) sqlite3.exe खोलें.
चरण 3) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db"निम्न आदेश द्वारा:
.open TutorialsSampleDB.db
चरण 4) एक नया इंडेक्स बनाएं “छात्रनामसूचकांक” निम्नलिखित आदेश का उपयोग करके:
CREATE INDEX StudentNameIndex ON Students(StudentName);
आपको इसका कोई आउटपुट नहीं दिखना चाहिए:
चरण 5) यह सुनिश्चित करने के लिए कि सूचकांक बनाया गया था, आप निम्नलिखित क्वेरी चला सकते हैं, जो आपको छात्र तालिका में बनाए गए सूचकांकों की सूची देगा:
PRAGMA index_list(Students);
आपको हमारे द्वारा अभी बनाया गया सूचकांक दिखाई देगा:
टिप्पणियाँ:
- इंडेक्स न केवल कॉलम बल्कि एक्सप्रेशन के आधार पर भी बनाए जा सकते हैं। कुछ इस तरह:
CREATE INDEX OrderTotalIndex ON OrderItems(OrderId, Quantity*Price);
“OrderTotalIndex” OrderId कॉलम पर आधारित होगा और साथ ही क्वांटिटी कॉलम वैल्यू और प्राइस कॉलम वैल्यू के गुणन पर भी आधारित होगा। इसलिए “OrderId” और “Quantity*Price” के लिए कोई भी क्वेरी कारगर होगी क्योंकि क्वेरी इंडेक्स का उपयोग करेगी।
- यदि आपने CREATE INDEX कथन में WHERE क्लॉज़ निर्दिष्ट किया है, तो इंडेक्स आंशिक इंडेक्स होगा। इस मामले में, इंडेक्स में केवल उन पंक्तियों के लिए प्रविष्टियाँ होंगी जो WHERE क्लॉज़ में शर्तों से मेल खाती हैं। उदाहरण के लिए, निम्नलिखित इंडेक्स में:
CREATE INDEX OrderTotalIndexForLargeQuantities ON OrderItems(OrderId, Quantity*Price) WHERE Quantity > 10000;
(उपर्युक्त उदाहरण में, सूचकांक एक आंशिक सूचकांक होगा क्योंकि इसमें WHERE क्लॉज निर्दिष्ट है। इस मामले में, सूचकांक केवल उन ऑर्डर पर लागू किया जाएगा जिनका मात्रा मान 10000 से बड़ा है। ध्यान दें कि, इस सूचकांक को WHERE क्लॉज के कारण आंशिक सूचकांक कहा जाता है, न कि इस पर प्रयुक्त अभिव्यक्ति के कारण। हालाँकि, आप सामान्य इंडेक्स के साथ अभिव्यक्तियों का उपयोग कर सकते हैं।)
- आप स्तंभों के लिए डुप्लिकेट प्रविष्टियों को रोकने के लिए CREATE INDEX के बजाय CREATE UNIQUE INDEX कथन का उपयोग कर सकते हैं और इस प्रकार अनुक्रमित स्तंभ के सभी मान अद्वितीय होंगे।
- किसी इंडेक्स को हटाने के लिए DROP INDEX कमांड का उपयोग करें, उसके बाद डिलीट करने के लिए इंडेक्स का नाम लिखें।
SQLite ट्रिगर
का परिचय SQLite ट्रिगर
ट्रिगर स्वचालित पूर्वनिर्धारित ऑपरेशन होते हैं जो तब निष्पादित होते हैं जब डेटाबेस टेबल पर कोई विशिष्ट क्रिया होती है। जब भी किसी टेबल पर निम्न में से कोई क्रिया होती है, तो ट्रिगर को फायर करने के लिए परिभाषित किया जा सकता है:
- तालिका में INSERT करें.
- तालिका से पंक्तियाँ हटाएँ.
- तालिका के किसी एक स्तंभ को अद्यतन करें।
SQLite FOR EACH ROW ट्रिगर का समर्थन करता है, ताकि ट्रिगर में पूर्वनिर्धारित संचालन तालिका पर हुई क्रियाओं में शामिल सभी पंक्तियों के लिए निष्पादित हो जाए (चाहे वह सम्मिलित करना, हटाना या अद्यतन करना हो)।
SQLite ट्रिगर बनाएं
नया TRIGGER बनाने के लिए, आप CREATE TRIGGER कथन का उपयोग निम्नानुसार कर सकते हैं:
- CREATE TRIGGER के बाद, आपको एक ट्रिगर नाम निर्दिष्ट करना चाहिए।
- ट्रिगर नाम के बाद, आपको यह निर्दिष्ट करना होगा कि ट्रिगर नाम को कब निष्पादित किया जाना चाहिए। आपके पास तीन विकल्प हैं:
- BEFORE - ट्रिगर INSERT, UPDATE, या डिलीट स्टेटमेंट निर्दिष्ट होने से पहले निष्पादित किया जाएगा।
- बाद में - ट्रिगर INSERT, UPDATE, या डिलीट स्टेटमेंट निर्दिष्ट होने के बाद निष्पादित किया जाएगा।
- INSTEAD OF - यह ट्रिगर को फायर करने वाली क्रिया को TRIGGER में निर्दिष्ट कथन से बदल देगा। INSTEAD OF ट्रिगर टेबल के साथ लागू नहीं होता है, केवल व्यू के साथ।
ट्रिगर्स केवल क्रिएट ट्रिगर कमांड पर निर्दिष्ट कथन के प्रकार के आधार पर सक्रिय (फायर) किए जाएंगे। उदाहरण के लिए:
- किसी भी इन्सर्ट कथन से पहले BEFORE INSERT ट्रिगर सक्रिय (फायर) हो जाएगा।
- AFTER UPDATE ट्रिगर किसी भी अपडेट स्टेटमेंट के बाद सक्रिय (फायर) हो जाएगा, ... और इसी तरह।
ट्रिगर के अंदर, आप “नया” कीवर्ड का उपयोग करके नए डाले गए मानों को संदर्भित कर सकते हैं। साथ ही, आप पुराने कीवर्ड का उपयोग करके हटाए गए या अपडेट किए गए मानों को संदर्भित कर सकते हैं। निम्नलिखित रूप में:
- INSERT ट्रिगर्स के अंदर – new कीवर्ड का उपयोग किया जा सकता है।
- अपडेट ट्रिगर्स के अंदर - नए और पुराने कीवर्ड का उपयोग किया जा सकता है।
- DELETE ट्रिगर्स के अंदर – पुराने कीवर्ड का उपयोग किया जा सकता है।
उदाहरण
निम्नलिखित में, हम एक ट्रिगर बनाएंगे जो एक नए छात्र को " में सम्मिलित करने से पहले फायर होगाछात्र”तालिका।
यह नए सम्मिलित छात्र को तालिका में लॉग करेगा “छात्रलॉग” वर्तमान दिनांक समय के लिए एक स्वचालित समय टिकट के साथ जब सम्मिलित कथन हुआ। निम्नानुसार:
चरण 1) निर्देशिका पर नेविगेट करें “सी:\sqlite” और sqlite3.exe चलाएँ.
चरण 2) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db” निम्नलिखित आदेश चलाकर:
.open TutorialsSampleDB.db
चरण 3) ट्रिगर बनाएं “InsertIntoStudentTrigger” निम्नलिखित आदेश चलाकर:
CREATE TRIGGER InsertIntoStudentTrigger
BEFORE INSERT ON Students
BEGIN
INSERT INTO StudentsLog VALUES(new.StudentId, datetime(), 'Insert');
END;
समारोह "दिनांक समय()" आपको वह वर्तमान दिनांक समय स्टैम्प देगा जब इन्सर्ट स्टेटमेंट हुआ था। ताकि हम प्रत्येक ट्रांजेक्शन में स्वचालित टाइम स्टैम्प जोड़कर इन्सर्ट ट्रांजेक्शन को लॉग कर सकें।
कमांड सफलतापूर्वक चलना चाहिए, और आपको कोई आउटपुट नहीं मिलेगा:
ट्रिगर "InsertIntoStudentTriggerजब भी आप students टेबल में कोई नया छात्र डालेंगे तो ” सक्रिय हो जाएगा।नई” कीवर्ड उन मानों को संदर्भित करता है जिन्हें डाला जाएगा। उदाहरण के लिए, “नया.छात्रआईडी” वह छात्र आईडी होगी जो डाली जाएगी।
अब, हम परीक्षण करेंगे कि जब हम कोई नया छात्र सम्मिलित करते हैं तो ट्रिगर कैसा व्यवहार करता है।
चरण 4) निम्नलिखित कमांड लिखें जो students तालिका में एक नया छात्र सम्मिलित करेगा:
INSERT INTO Students VALUES(11, 'guru11', 1, '1999-10-12');
चरण 5) निम्नलिखित कमांड लिखें जो “ से सभी पंक्तियों का चयन करेगाछात्रलॉग" मेज़:
SELECT * FROM StudentsLog;
आपको हमारे द्वारा अभी सम्मिलित किए गए नए छात्र के लिए एक नई पंक्ति दिखाई देगी:
यह पंक्ति आईडी 11 वाले नए छात्र को सम्मिलित करने से पहले ट्रिगर द्वारा सम्मिलित की गई थी।
इस उदाहरण में हमने ट्रिगर का उपयोग किया है “ InsertIntoStudentTrigger ” हमने बनाया, तालिका में किसी भी सम्मिलित लेनदेन को लॉग करने के लिए “छात्रलॉग” स्वचालित रूप से। उसी तरह आप किसी भी अपडेट को लॉग कर सकते हैं, या स्टेटमेंट को डिलीट कर सकते हैं।
ट्रिगर्स के साथ अनपेक्षित अपडेट को रोकना:
किसी तालिका पर BEFORE UPDATE ट्रिगर्स का उपयोग करके, आप किसी अभिव्यक्ति के आधार पर किसी कॉलम पर अद्यतन कथनों को रोक सकते हैं।
उदाहरण
निम्नलिखित उदाहरण में, हम किसी भी अद्यतन कथन को Students तालिका में “studentname” कॉलम को अद्यतन करने से रोकेंगे:
चरण 1) निर्देशिका पर नेविगेट करें “सी:\sqlite” और sqlite3.exe चलाएँ.
चरण 2) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db” निम्नलिखित आदेश चलाकर:
.open TutorialsSampleDB.db
चरण 3) एक नया ट्रिगर बनाएं “रोकेंअपडेटस्टूडेंटनाम" मेज पर "छात्र” निम्नलिखित आदेश चलाकर
CREATE TRIGGER preventUpdateStudentName
BEFORE UPDATE OF StudentName ON Students
FOR EACH ROW
BEGIN
SELECT RAISE(ABORT, 'You cannot update studentname');
END;
"RAISE” कमांड एक त्रुटि संदेश के साथ एक त्रुटि उठाएगा “ आप छात्र का नाम अपडेट नहीं कर सकते “, और फिर यह अद्यतन कथन को निष्पादित होने से रोक देगा।
अब, हम यह सत्यापित करेंगे कि ट्रिगर अच्छी तरह से काम करता है, और यह studentname कॉलम के लिए किसी भी अपडेट को रोकता है।
चरण 4) निम्नलिखित अपडेट कमांड चलाएँ, जो छात्र का नाम अपडेट कर देगा “जैक" होना "Jack1".
UPDATE Students SET StudentName = 'Jack1' WHERE StudentName = 'Jack';
आपको वह त्रुटि संदेश मिलना चाहिए जो हमने ट्रिगर पर निर्दिष्ट किया है, जिसमें कहा गया है कि “आप छात्र का नाम अपडेट नहीं कर सकते" के रूप में निम्नानुसार:
चरण 5) निम्नलिखित कमांड चलाएँ, जो students तालिका से छात्रों के नामों की सूची का चयन करेगा।
SELECT StudentName FROM Students;
आप देखेंगे कि छात्र का नाम “जैक” अभी भी वही है और इसमें कोई बदलाव नहीं हुआ है:
सारांश
दृश्य, अनुक्रमणिका और ट्रिगर्स किसी भी गतिविधि को प्रबंधित करने के लिए बहुत शक्तिशाली उपकरण हैं। SQLite डेटाबेस. आप कर सकते हैं tracकिसी टेबल पर डेटा संशोधन होने पर उसे ट्रैक करें। इंडेक्स बनाकर डेटाबेस से डेटा प्राप्त करने की प्रक्रिया को भी बेहतर बनाया जा सकता है।















