SQLite में, विदेशी कुंजी बाधाओं को तब तक लागू नहीं किया जाता जब तक कि विदेशी कुंजी समर्थन सक्षम न किया गया हो।
विदेशी कुंजियों को सक्षम करने में निम्नलिखित शामिल हैं:
- SQLite संकलित करते समय विदेशी कुंजी सक्षम करें।
- रनटाइम पर विदेशी कुंजी सक्षम करें।
SQLite संकलित करते समय विदेशी कुंजी सक्षम करें
जब SQLite को संकलित करने की बात आती है, तो यह सक्षम करने . की बात नहीं है विदेशी कुंजियाँ - यह अक्षम न होने . की बात है उन्हें।
SQLite को संकलित करते समय विदेशी कुंजियों को सक्षम करने का सीधा सा अर्थ है कि आप SQLITE_OMIT_FOREIGN_KEY
का उपयोग नहीं करते हैं और SQLITE_OMIT_TRIGGER
इसे संकलित करते समय।
अगर SQLITE_OMIT_TRIGGER
परिभाषित किया गया है लेकिन SQLITE_OMIT_FOREIGN_KEY
नहीं है, तो विदेशी कुंजी परिभाषाओं को पार्स किया जाता है और PRAGMA foreign_key_list
का उपयोग करके पूछताछ की जा सकती है , लेकिन विदेशी कुंजी बाधाओं को लागू नहीं किया जाता है। PRAGMA foreign_keys
कमांड इस कॉन्फ़िगरेशन में नो-ऑप है।
अगर OMIT_FOREIGN_KEY
परिभाषित किया गया है, तो विदेशी कुंजी परिभाषाओं को भी पार्स नहीं किया जा सकता है (विदेशी कुंजी परिभाषा निर्दिष्ट करने का प्रयास एक वाक्यविन्यास त्रुटि है)।
रनटाइम पर विदेशी कुंजी सक्षम करें
यहां तक कि जब पुस्तकालय को विदेशी कुंजी बाधाओं के साथ संकलित किया गया है, तब भी आपको रनटाइम पर विदेशी कुंजी समर्थन सक्षम करने की आवश्यकता है।
आप इसे निम्न कोड के साथ कर सकते हैं:
PRAGMA foreign_keys = ON;
अधिकांश PRAGMA
. की तरह कथन, आप वैकल्पिक रूप से ON
. को बदल सकते हैं TRUE
. के साथ , YES
, या 1
।
एक बार जब आप इसे चला लेते हैं, तो आपकी विदेशी कुंजियाँ लागू हो जाएँगी।
ध्यान दें कि बनाने . के लिए इस सेटिंग की आवश्यकता नहीं है विदेशी कुंजी, लेकिन यह लागू करने . के लिए आवश्यक है विदेशी कुंजी।
अन्य कनेक्शन
ध्यान दें कि यह केवल वर्तमान डेटाबेस कनेक्शन के लिए विदेशी कुंजी बाधाओं को सक्षम करता है।
यदि आप एक नया कनेक्शन खोलते हैं, तो आपको उस स्टेटमेंट को फिर से चलाने की आवश्यकता होगी यदि आप उस संबंध में विदेशी कुंजी को लागू करना चाहते हैं।
वर्तमान कनेक्शन के लिए विदेशी कुंजी समर्थन जांचें
आप निम्न कोड चलाकर यह भी देख सकते हैं कि आपके वर्तमान कनेक्शन के लिए विदेशी कुंजियाँ पहले ही सक्षम की गई हैं या नहीं।
PRAGMA foreign_keys;
परिणाम:
1
मेरे मामले में, मैंने पहले ही इस कनेक्शन के लिए विदेशी कुंजियाँ सक्षम कर दी हैं, इसलिए परिणाम 1 है। यदि विदेशी कुंजियाँ अक्षम की गई थीं, तो परिणाम 0 होगा।
यहां अक्षम करने, मान की जाँच करने, फिर मान को सक्षम करने और फिर से जाँचने का एक उदाहरण दिया गया है।
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;
परिणाम:
sqlite> PRAGMA foreign_keys = FALSE; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 0 sqlite> PRAGMA foreign_keys = YES; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 1