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

SQLite ट्रिगर

सारांश :यह ट्यूटोरियल 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 INSERT
  • AFTER INSERT
  • BEFORE UPDATE
  • AFTER UPDATE
  • BEFORE DELETE
  • AFTER DELETE
  • INSTEAD OF INSERT
  • INSTEAD OF DELETE
  • INSTEAD 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', '[email protected]', '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 = '[email protected]'
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 ट्रिगर्स से परिचित कराया है और आपको डेटाबेस से ट्रिगर्स बनाने और छोड़ने का तरीका दिखाया है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite UNIXEPOCH () फ़ंक्शन का परिचय देता है

  2. क्या हर बार एप्लिकेशन शुरू होने पर संसाधन आईडी बदल जाती है

  3. Excel में स्वचालित रूप से SQLite क्वेरी परिणाम खोलें

  4. आईडी का उपयोग करके एकाधिक पंक्तियां हटाएं?

  5. SQLite इफ़नुल () कैसे काम करता है