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

वास्तविक तालिका से पंक्तियों को हटाने से पहले संबंधित तालिकाओं से पंक्तियों को हटाने के लिए ट्रिगर करें

आपके ट्रिगर फ़ंक्शन के बारे में कुछ और सलाह:

CREATE OR REPLACE FUNCTION delete_question()
  RETURNS trigger AS
$func$
BEGIN

CASE OLD.que_type
WHEN 1 THEN
    DELETE FROM mcq   WHERE que_id=OLD.id;
WHEN 2, 3 THEN
    DELETE FROM tffb  WHERE que_id=OLD.id;
WHEN 4 THEN
    DELETE FROM essay WHERE que_id=OLD.id;
-- ELSE
--      Do something?
END CASE;

RETURN OLD;

END
$func$ LANGUAGE plpgsql;

प्रमुख बिंदु

  • SELECT . के साथ अस्तित्व के लिए आपका चेक बयान लागत को दोगुना करता है। बस DELETE चलाएं , यदि कोई मेल खाने वाली पंक्ति नहीं मिलती है, तो कुछ भी नहीं हटाया जाता है।

  • CASE का उपयोग करें यहाँ बयान। छोटा, तेज। ध्यान दें कि plpgsql CASE SQL CASE . से थोड़ा अलग है बयान। उदाहरण के लिए, आप कई मामलों को एक साथ सूचीबद्ध कर सकते हैं।

  • आपको DECLARE की आवश्यकता नहीं है कीवर्ड, जब तक कि आप वास्तव में चर घोषित नहीं करते।

वैकल्पिक डिज़ाइन

आप कैस्केडिंग डिलीट्स द्वारा इस समस्या से पूरी तरह बच सकते हैं विदेशी कुंजी के माध्यम से , के रूप में वास्तविक/20051513#comment29864955_20035105">@a_horse टिप्पणी में उल्लेख किया गया है . मेरा स्कीमा लेआउट इस तरह दिखेगा:

CREATE TABLE question (
   question_id serial NOT NULL PRIMARY KEY
  ,que_type    int   -- this may be redundant as well
);

CREATE TABLE essay (
   que_id int NOT NULL PRIMARY KEY
              REFERNECES question(question_id) ON UPDATE CASCADE
                                               ON DELETE CASCADE
  ,ans    text
);

...

serial के बारे में :
ऑटो इंक्रीमेंट SQL फंक्शन



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgAdmin III क्वेरी परिणामों को छोटा क्यों किया जाता है?

  2. चेनलिंक नोड:मैं ओआरएम त्रुटियों को लॉक करने में असमर्थ फिक्सिंग से कैसे संपर्क कर सकता हूं?

  3. ग्रुपिंग के पहले और आखिरी टाइमस्टैम्प के बीच किसी अन्य फ़ील्ड का अंतर प्राप्त करें

  4. PostgreSQL में एक पंक्ति के बाइट आकार का पता लगाएं

  5. पोस्टग्रेज से जुड़ने में नोड .NET कोर से 20 गुना तेज है