SQLite में, आप DROP TABLE
. के साथ एक टेबल ड्रॉप कर सकते हैं बयान।
आप वैकल्पिक रूप से IF EXISTS
. जोड़ सकते हैं यदि तालिका मौजूद नहीं है तो होने वाली किसी भी त्रुटि को दबाने के लिए क्लॉज।
साथ ही, यदि तालिका को किसी विदेशी कुंजी द्वारा संदर्भित किया जाता है, तो कुछ बातों के बारे में पता होना चाहिए।
उदाहरण
SQLite में तालिका छोड़ने का सबसे सरल तरीका प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
DROP TABLE t1;
यह t1
. नामक तालिका को गिरा देता है ।
आप वैकल्पिक रूप से तालिका नाम को स्कीमा नाम के साथ उपसर्ग कर सकते हैं।
IF EXISTS
का उपयोग करना खंड
आप IF EXISTS
. का उपयोग कर सकते हैं तालिका मौजूद नहीं होने की स्थिति में होने वाली किसी भी त्रुटि को दबाने के लिए क्लॉज।
DROP TABLE IF EXISTS t2;
अगर हम IF EXISTS
. को हटा देते हैं खंड, और फिर से चलाएँ, हमें एक त्रुटि मिलती है।
उदाहरण:
DROP TABLE t2;
परिणाम:
Error: no such table: t2
विदेशी कुंजी और निर्भरता देखें
SQLite CASCADE
का समर्थन नहीं करता है और RESTRICT
कीवर्ड, जो SQL मानक में शामिल हैं, और कुछ अन्य RDBMS (जैसे PostgreSQL) द्वारा समर्थित हैं। इन कीवर्ड्स को यह निर्दिष्ट करने के लिए डिज़ाइन किया गया है कि लक्ष्य तालिका में निर्भरता होने पर क्या करना है (जैसे कि एक दृश्य या विदेशी कुंजी जो तालिका को संदर्भित करती है)।
यह देखते हुए कि SQLite इन कीवर्ड का समर्थन नहीं करता है, यहां बताया गया है कि जब आप किसी तालिका को छोड़ने का प्रयास करते हैं तो SQLite दृश्यों और विदेशी कुंजियों से कैसे निपटता है।
SQLite किसी भी आश्रित विचारों को अनदेखा करता है। दूसरे शब्दों में, यह आगे बढ़ता है और तालिका को गिरा देता है, भले ही कोई ऐसा दृश्य हो जो इसका संदर्भ देता हो।
विदेशी चाबियों के लिए…
सबसे पहले, SQLite में डिफ़ॉल्ट रूप से विदेशी कुंजी अक्षम हैं। इसलिए जब तक आप उन्हें सक्षम नहीं करते, लक्ष्य तालिका को संदर्भित करने वाली कोई भी विदेशी कुंजी लक्ष्य तालिका को छोड़ने पर कोई प्रभाव नहीं डालेगी। दूसरे शब्दों में, तालिका गिरा दी जाएगी।
यदि आपके सत्र में विदेशी कुंजी सक्षम हैं, तो वे केवल तालिका को छोड़ने से रोकेंगे यदि कोई डेटा है जो उस विदेशी कुंजी का उल्लंघन करेगा। यदि आपकी चाइल्ड टेबल में कोई डेटा नहीं है, तो पैरेंट टेबल बिना किसी त्रुटि के हटा दी जाएगी। यदि चाइल्ड टेबल में डेटा है (संभवत:पैरेंट टेबल की प्राथमिक कुंजी को संदर्भित करने वाले डेटा सहित), तो इसके परिणामस्वरूप एक त्रुटि होगी और तालिका को नहीं छोड़ा जाएगा।
इस तरह:
PRAGMA foreign_keys = ON;
DROP TABLE t1;
परिणाम:
Error: FOREIGN KEY constraint failed
इसके इस तरह काम करने का कारण यह है कि SQLite एक अंतर्निहित DELETE FROM
करता है तालिका छोड़ने से पहले ऑपरेशन। यदि DELETE FROM
ऑपरेशन के परिणामस्वरूप विदेशी कुंजी उल्लंघन होता है, तो हमें त्रुटि मिलती है। लेकिन यदि तालिका में कोई डेटा नहीं है, तो कोई भी DELETE FROM
ऑपरेशन के परिणामस्वरूप विदेशी कुंजी उल्लंघन नहीं होगा, और तालिका को छोड़ा जा सकता है।
संक्षेप में, यह DROP TABLE
नहीं है ऑपरेशन जो किसी भी विदेशी कुंजी उल्लंघन का कारण बनता है, यह निहित है DELETE FROM
ऑपरेशन।
जब विदेशी कुंजी ON DELETE CASCADE
का उपयोग करती है
हालाँकि, यदि विदेशी कुंजी बाधा को ON DELETE CASCADE
. के साथ परिभाषित किया गया है , तो पैरेंट टेबल को हटा दिया जाएगा, और उस तालिका के प्राथमिक कुंजी कॉलम को संदर्भित करने वाली कोई भी पंक्ति चाइल्ड टेबल में हटा दी जाएगी।
यहाँ एक उदाहरण है।
टेबल बनाएं और डेटा डालें:
CREATE TABLE t11 (
c1 integer PRIMARY KEY AUTOINCREMENT
);
CREATE TABLE t12 (
c1 integer PRIMARY KEY AUTOINCREMENT,
c2 integer REFERENCES t11 (c1) ON DELETE CASCADE
);
INSERT INTO t11 VALUES (1);
INSERT INTO t12 VALUES (1, 1);
डेटा चुनें:
sqlite> SELECT * FROM t11;
c1
--
1
sqlite> SELECT * FROM t12;
c1 c2
-- --
1 1
मूल तालिका छोड़ें और सभी तालिकाओं की समीक्षा करें:
sqlite> DROP TABLE t11;
sqlite> .tables
t12
हम देख सकते हैं कि t11
अब मौजूद नहीं है, लेकिन t12
अभी भी मौजूद है।
t12
. पर विदेशी कुंजी की जांच करें :
sqlite> PRAGMA foreign_key_list(t12);
id seq table from to on_update on_delete match
-- --- ----- ---- -- --------- --------- -----
0 0 t11 c2 c1 NO ACTION CASCADE NONE
हां, यह अभी भी मौजूद है, और हम पुष्टि कर सकते हैं कि इसमें ON DELETE CASCADE
है। ।
t12
. से डेटा चुनें :
sqlite> SELECT * FROM t12;
sqlite>
कोई पंक्तियाँ वापस नहीं की जाती हैं। ऐसा इसलिए है क्योंकि ON DELETE CASCADE
विदेशी कुंजी पर विकल्प ने सुनिश्चित किया कि मूल तालिका (t11
.) के समय पंक्ति हटा दी गई थी ) को हटा दिया गया था (या अधिक सटीक रूप से, जब इसका डेटा निहित DELETE FROM
के माध्यम से हटा दिया गया था। गिराए जाने से पहले ऑपरेशन)।
विदेशी कुंजी छोड़ना
SQLite वास्तव में विदेशी कुंजियों को छोड़ने का समर्थन नहीं करता है। आम तौर पर SQL में आप ALTER TABLE
. के साथ विदेशी कुंजियों को छोड़ देते हैं कथन, लेकिन SQLite का ALTER TABLE
कार्यान्वयन बाधाओं को छोड़ने की अनुमति नहीं देता है।
हालांकि इस स्थिति से निपटने का एक तरीका है। उदाहरण के लिए SQLite में एक विदेशी कुंजी कैसे छोड़ें देखें।