सारांश :यह ट्यूटोरियल SQLite ट्रिगर पर चर्चा करता है, जो एक डेटाबेस ऑब्जेक्ट है जो किसी तालिका में डेटा बदलने पर स्वचालित रूप से सक्रिय हो जाता है।
SQLite ट्रिगर क्या है
SQLite ट्रिगर एक नामित डेटाबेस ऑब्जेक्ट है जिसे INSERT . होने पर स्वचालित रूप से निष्पादित किया जाता है , UPDATE या DELETE संबंधित तालिका के सामने बयान जारी किया जाता है।
हमें SQLite ट्रिगर की आवश्यकता कब होती है
परिष्कृत ऑडिटिंग को सक्षम करने के लिए आप अक्सर ट्रिगर का उपयोग करते हैं। उदाहरण के लिए, आप जब भी संवेदनशील डेटा जैसे वेतन और पता में परिवर्तन करते हैं, उसमें परिवर्तन लॉग करना चाहते हैं।
इसके अलावा, आप डेटाबेस स्तर पर जटिल व्यावसायिक नियमों को केंद्रीय रूप से लागू करने और अमान्य लेनदेन को रोकने के लिए ट्रिगर का उपयोग करते हैं।
SQLite CREATE TRIGGER बयान
SQLite में एक नया ट्रिगर बनाने के लिए, आप CREATE TRIGGER . का उपयोग करते हैं बयान इस प्रकार है:
CREATE TRIGGER [IF NOT EXISTS] trigger_name
[BEFORE|AFTER|INSTEAD OF] [INSERT|UPDATE|DELETE]
ON table_name
[WHEN condition]
BEGIN
statements;
END;Code language: SQL (Structured Query Language) (sql) इस सिंटैक्स में:
- सबसे पहले,
CREATE TRIGGER. के बाद ट्रिगर का नाम निर्दिष्ट करें कीवर्ड। - अगला, निर्धारित करें कि ट्रिगर कब सक्रिय किया जाता है जैसे
BEFORE,AFTER, याINSTEAD OF. आपBEFOREबना सकते हैं औरAFTERएक मेज पर ट्रिगर। हालांकि, आप केवल एकINSTEAD OFबना सकते हैं एक दृश्य पर ट्रिगर करें। - फिर, उस घटना को निर्दिष्ट करें जिसके कारण ट्रिगर का आह्वान किया जाता है जैसे
INSERT,UPDATE, याDELETE। - उसके बाद, उस तालिका को इंगित करें जिससे ट्रिगर संबंधित है।
- आखिरकार, ट्रिगर लॉजिक को
BEGIN ENDमें रखें ब्लॉक, जो कोई भी मान्य SQL कथन हो सकता है।
यदि आप ट्रिगर के सक्रिय होने के समय और ट्रिगर को सक्रिय करने वाली घटना को मिलाते हैं, तो आपके पास कुल 9 संभावनाएं हैं:
BEFORE INSERTAFTER INSERTBEFORE UPDATEAFTER UPDATEBEFORE DELETEAFTER DELETEINSTEAD OF INSERTINSTEAD OF DELETEINSTEAD OF UPDATE
मान लीजिए कि आप एक UPDATE का उपयोग करते हैं तालिका में 10 पंक्तियों को अद्यतन करने के लिए कथन, तालिका से जुड़े ट्रिगर को 10 बार सक्रिय किया जाता है। इस ट्रिगर को FOR EACH ROW . कहा जाता है चालू कर देना। यदि तालिका से संबद्ध ट्रिगर को एक बार सक्रिय किया जाता है, तो हम इस ट्रिगर को FOR EACH STATEMENT कहते हैं ट्रिगर।
संस्करण 3.9.2 के अनुसार, SQLite केवल FOR EACH ROW . का समर्थन करता है ट्रिगर। इसने अभी तक FOR EACH STATEMENT . का समर्थन नहीं किया है ट्रिगर।
यदि आप WHEN . में किसी शर्त का उपयोग करते हैं खंड, ट्रिगर केवल तभी लागू किया जाता है जब स्थिति सत्य होती है। यदि आप WHEN . को छोड़ देते हैं क्लॉज, ट्रिगर सभी पंक्तियों के लिए निष्पादित होता है।
ध्यान दें कि यदि आप कोई तालिका छोड़ते हैं, तो सभी संबद्ध ट्रिगर भी हटा दिए जाते हैं। हालांकि, यदि ट्रिगर अन्य तालिकाओं का संदर्भ देता है, तो अन्य तालिकाओं को हटा या अद्यतन करने पर ट्रिगर को हटाया या बदला नहीं जाता है।
उदाहरण के लिए, एक ट्रिगर people . नामक तालिका का संदर्भ देता है , आप people . को छोड़ दें तालिका या उसका नाम बदलें, आपको ट्रिगर की परिभाषा को मैन्युअल रूप से बदलने की आवश्यकता है।
आप OLD . का उपयोग करके सम्मिलित, हटाए या अपडेट की जा रही पंक्ति के डेटा तक पहुंच सकते हैं और NEW प्रपत्र में संदर्भ:OLD.column_name और NEW.column_name ।
OLD और NEW ट्रिगर को सक्रिय करने वाली घटना के आधार पर संदर्भ उपलब्ध हैं।
निम्न तालिका नियमों को दर्शाती है:
| कार्रवाई | संदर्भ |
|---|---|
| सम्मिलित करें | नया उपलब्ध है |
| अद्यतन करें | नए और पुराने दोनों उपलब्ध हैं |
| हटाएं | पुराना उपलब्ध है |
SQLite उदाहरण ट्रिगर करता है
आइए कंपनी के सभी व्यावसायिक लीड को संग्रहीत करने के लिए लीड नामक एक नई तालिका बनाएं।
CREATE TABLE leads (
id integer PRIMARY KEY,
first_name text NOT NULL,
last_name text NOT NULL,
phone text NOT NULL,
email text NOT NULL,
source text NOT NULL
);Code language: SQL (Structured Query Language) (sql) 1) SQLite BEFORE INSERT ट्रिगर उदाहरण
मान लीजिए कि आप leads . में नई लीड डालने से पहले ईमेल पते की पुष्टि करना चाहते हैं टेबल। इस मामले में, आप BEFORE INSERT . का उपयोग कर सकते हैं ट्रिगर।
सबसे पहले, BEFORE INSERT . बनाएं इस प्रकार ट्रिगर करें:
CREATE TRIGGER validate_email_before_insert_leads
BEFORE INSERT ON leads
BEGIN
SELECT
CASE
WHEN NEW.email NOT LIKE '%_@__%.__%' THEN
RAISE (ABORT,'Invalid email address')
END;
END;Code language: SQL (Structured Query Language) (sql)
हमने NEW का इस्तेमाल किया सम्मिलित की जा रही पंक्ति के ईमेल कॉलम तक पहुँचने का संदर्भ।
ईमेल को मान्य करने के लिए, हमने LIKE . का इस्तेमाल किया ईमेल पैटर्न के आधार पर यह निर्धारित करने के लिए कि ईमेल वैध है या नहीं ऑपरेटर। अगर ईमेल मान्य नहीं है, तो RAISE फ़ंक्शन सम्मिलित करना बंद कर देता है और एक त्रुटि संदेश जारी करता है।
दूसरा, leads . में अमान्य ईमेल वाली एक पंक्ति डालें टेबल।
INSERT INTO leads (first_name,last_name,email,phone)
VALUES('John','Doe','jjj','4089009334');Code language: SQL (Structured Query Language) (sql) SQLite ने एक त्रुटि जारी की:"अमान्य ईमेल पता" और सम्मिलन के निष्पादन को निरस्त कर दिया।
तीसरा, एक मान्य ईमेल के साथ एक पंक्ति डालें।
INSERT INTO leads (first_name, last_name, email, phone)
VALUES ('John', 'Doe', 'john.doe@sqlitetutorial.net', '4089009334');Code language: SQL (Structured Query Language) (sql) क्योंकि ईमेल मान्य है, सम्मिलित विवरण सफलतापूर्वक निष्पादित किया गया।
SELECT
first_name,
last_name,
email,
phone
FROM
leads;Code language: SQL (Structured Query Language) (sql)
2) SQLite AFTER UPDATE ट्रिगर उदाहरण
लीड के फोन और ईमेल इतने महत्वपूर्ण हैं कि आप इस जानकारी को खोने का जोखिम नहीं उठा सकते। उदाहरण के लिए, कोई गलती से ईमेल या फोन को गलत में अपडेट कर देता है या उसे हटा भी देता है।
इस मूल्यवान डेटा की सुरक्षा के लिए, आप फोन और ईमेल में किए गए सभी परिवर्तनों को लॉग करने के लिए एक ट्रिगर का उपयोग करते हैं।
सबसे पहले, lead_logs . नामक एक नई तालिका बनाएं ऐतिहासिक डेटा संग्रहीत करने के लिए।
CREATE TABLE lead_logs (
id INTEGER PRIMARY KEY,
old_id int,
new_id int,
old_phone text,
new_phone text,
old_email text,
new_email text,
user_action text,
created_at text
);Code language: SQL (Structured Query Language) (sql)
दूसरा, एक AFTER UPDATE बनाएं lead_logs में डेटा लॉग करने के लिए ट्रिगर करें जब भी email में कोई अपडेट होता है तो तालिका या phone कॉलम।
CREATE TRIGGER log_contact_after_update
AFTER UPDATE ON leads
WHEN old.phone <> new.phone
OR old.email <> new.email
BEGIN
INSERT INTO lead_logs (
old_id,
new_id,
old_phone,
new_phone,
old_email,
new_email,
user_action,
created_at
)
VALUES
(
old.id,
new.id,
old.phone,
new.phone,
old.email,
new.email,
'UPDATE',
DATETIME('NOW')
) ;
END;Code language: SQL (Structured Query Language) (sql)
आप देखते हैं कि WHEN . की स्थिति में क्लॉज निर्दिष्ट करता है कि ट्रिगर केवल तभी लागू होता है जब ईमेल या फोन कॉलम में कोई बदलाव होता है।
तीसरा, John का अंतिम नाम अपडेट करें Doe . से करने के लिए Smith ।
UPDATE leads
SET
last_name = 'Smith'
WHERE
id = 1;Code language: SQL (Structured Query Language) (sql)
ट्रिगर log_contact_after_update ईमेल या फ़ोन में कोई परिवर्तन नहीं होने के कारण लागू नहीं किया गया था।
चौथा, John . के ईमेल और फोन दोनों को अपडेट करें नए लोगों के लिए।
UPDATE leads
SET
phone = '4089998888',
email = 'john.smith@sqlitetutorial.net'
WHERE
id = 1;Code language: SQL (Structured Query Language) (sql) यदि आप लॉग तालिका की जाँच करते हैं, तो आप देखेंगे कि वहाँ एक नई प्रविष्टि है।
SELECT
old_phone,
new_phone,
old_email,
new_email,
user_action
FROM
lead_logs;Code language: SQL (Structured Query Language) (sql)
आप AFTER INSERT . विकसित कर सकते हैं और AFTER DELETE lead_logs . में डेटा लॉग करने के लिए ट्रिगर एक व्यायाम के रूप में टेबल।
SQLite DROP TRIGGER बयान
किसी मौजूदा ट्रिगर को छोड़ने के लिए, आप DROP TRIGGER . का उपयोग करते हैं बयान इस प्रकार है:
DROP TRIGGER [IF EXISTS] trigger_name;Code language: SQL (Structured Query Language) (sql) इस सिंटैक्स में:
- सबसे पहले, उस ट्रिगर का नाम निर्दिष्ट करें जिसे आप
DROP TRIGGERके बाद छोड़ना चाहते हैं कीवर्ड। - दूसरा,
IF EXISTSका उपयोग करें ट्रिगर के मौजूद होने पर ही उसे हटाने का विकल्प।
ध्यान दें कि यदि आप कोई तालिका छोड़ते हैं, तो SQLite स्वचालित रूप से तालिका से संबद्ध सभी ट्रिगर को छोड़ देगा।
उदाहरण के लिए, validate_email_before_insert_leads . को हटाने के लिए ट्रिगर, आप निम्न कथन का उपयोग करते हैं:
DROP TRIGGER validate_email_before_insert_leads;Code language: SQL (Structured Query Language) (sql) इस ट्यूटोरियल में, हमने आपको SQLite ट्रिगर्स से परिचित कराया है और आपको डेटाबेस से ट्रिगर्स बनाने और छोड़ने का तरीका दिखाया है।