SQL में, यदि आप किसी डेटाबेस से किसी तालिका को हटाना चाहते हैं, तो आपको DROP TABLE
का उपयोग करना होगा बयान।
इससे टेबल और उसका सारा डेटा नष्ट हो जाता है।
सिंटैक्स
SQL मानक सिंटैक्स इस प्रकार है:
DROP TABLE <table name> <drop behavior>
कहां:
<तालिका का नाम>
उस तालिका का नाम है जिसे आप छोड़ना चाहते हैं।<ड्रॉप व्यवहार>
कोई विकल्प निर्दिष्ट करता है। ये या तोCASCADE
हो सकते हैं याप्रतिबंध
.
कुछ RDBMS एक वैकल्पिक IF EXISTS
. भी स्वीकार करते हैं तर्क जिसका अर्थ है कि यदि तालिका मौजूद नहीं है तो यह कोई त्रुटि नहीं लौटाएगा।
कुछ RDBMS (जैसे MySQL और MariaDB) एक वैकल्पिक TEMPORARY
. को भी स्वीकार करते हैं यह सुनिश्चित करने के लिए कीवर्ड केवल अस्थायी तालिकाओं को छोड़ दिया जाता है।
Oracle एक PURGE
. भी स्वीकार करता है खंड, जो इसे रीसायकल बिन से शुद्ध करता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
DROP TABLE t1;
उस कोड को चलाने से t1
. नामक तालिका गिर जाती है और उसका सारा डेटा।
अगर मौजूद है
खंड
यहां IF EXISTS
. का उपयोग करने का एक उदाहरण दिया गया है यह जाँचने के लिए कि तालिका पहले से मौजूद है या नहीं।
DROP TABLE IF EXISTS t1;
IF EXISTS
. का उपयोग करना सुनिश्चित करता है कि यदि तालिका मौजूद नहीं है तो हमें कोई त्रुटि नहीं मिलेगी।
अगर हम IF EXISTS
remove को हटा देते हैं तो यहां बताया गया है कि क्या होता है कथन से:
DROP TABLE t1;
परिणाम:
Msg 3701, Level 11, State 5, Line 1 Cannot drop the table 't1', because it does not exist or you do not have permission.
वह संदेश SQL सर्वर द्वारा लौटाया गया है। आपका संदेश उस DBMS पर निर्भर करेगा जिसका आप उपयोग कर रहे हैं।
आश्रित विदेशी कुंजी और दृश्य
कुछ RDBMS एक वैकल्पिक RESTRICT
. की अनुमति देते हैं या कैस्केड
कीवर्ड जो निर्दिष्ट करता है कि क्या होता है यदि तालिका में कोई विदेशी कुंजी या विचार हैं जो इसका संदर्भ देते हैं।
प्रतिबंध
विकल्प
यहां RESTRICT
का उपयोग करने का एक उदाहरण दिया गया है किसी अन्य तालिका में किसी विदेशी कुंजी द्वारा संदर्भित तालिका को छोड़ने का प्रयास करते समय:
DROP TABLE t1 RESTRICT;
परिणाम:
cannot drop table t1 because other objects depend on it
यह उदाहरण PostgreSQL का उपयोग करके किया गया था। प्रतिबंध
डिफ़ॉल्ट विकल्प है, इसलिए हमें वही परिणाम प्राप्त होता, भले ही हमने RESTRICT
शामिल न किया होता कीवर्ड।
द कैस्केड
विकल्प
अगर हम CASCADE
पर स्विच करते हैं तो यहां क्या होता है? उसी तालिका को छोड़ने का प्रयास करते समय (जिसे किसी अन्य तालिका में विदेशी कुंजी द्वारा संदर्भित किया जाता है):
DROP TABLE t1 CASCADE;
परिणाम:
NOTICE: drop cascades to constraint t2_c2_fkey on table t2 Commands completed successfully
इसने विदेशी कुंजी को गिरा दिया जो हमारे t1
. को संदर्भित कर रही थी टेबल। विदेशी कुंजी को t2_c2_fkey
. कहा जाता था ।
ध्यान दें कि इसने उस तालिका को नहीं छोड़ा जिसमें विदेशी कुंजी थी। इसने केवल विदेशी कुंजी को गिरा दिया।
यदि लक्ष्य तालिका (t1
) किसी भी विचार द्वारा संदर्भित किया गया था, तो पूरा दृश्य हटा दिया गया होता।
आपको CASCADE
निर्दिष्ट करने की आवश्यकता नहीं है लक्ष्य तालिका के लिए मौजूद किसी भी अनुक्रमणिका, नियम, ट्रिगर या बाधाओं को छोड़ने के लिए। डिफ़ॉल्ट विकल्प (RESTRICT
. का उपयोग करने पर भी, ये स्वचालित रूप से हटा दिए जाते हैं )।
MySQL और MariaDB
कुछ DBMS (जैसे MySQL और MariaDB) RESTRICT
. को स्वीकार करते हैं और कैस्केड
कीवर्ड, लेकिन वे कुछ नहीं करते हैं। वे केवल DBMS के बीच आसान सुवाह्यता के लिए प्रदान किए जाते हैं।
ओरेकल
Oracle का सिंटैक्स थोड़ा अलग है, CASCADE CONSTRAINTS
, जो सभी संदर्भात्मक अखंडता बाधाओं को छोड़ देता है जो ड्रॉप की गई तालिका में प्राथमिक और अद्वितीय कुंजियों को संदर्भित करता है।
एसक्यूएल सर्वर
SQL सर्वर CASCADE
का समर्थन नहीं करता या प्रतिबंध
खोजशब्द। यदि तालिका में कोई विदेशी कुंजी निर्भरता है, तो आपको तालिका छोड़ने से पहले उन्हें छोड़ना होगा, अन्यथा आपको एक त्रुटि मिलेगी।
हालाँकि, SQL सर्वर में, आप किसी तालिका को छोड़ सकते हैं, भले ही वह किसी दृश्य या संग्रहीत कार्यविधि द्वारा संदर्भित हो। इसलिए, आपको ऐसे किसी भी संदर्भ की जांच करनी चाहिए, और स्पष्ट रूप से DROP VIEW
. का उपयोग करके उन्हें छोड़ देना चाहिए या ड्रॉप प्रक्रिया
।
SQLite
SQLite CASCADE
का समर्थन नहीं करता है या प्रतिबंध
खोजशब्द।
यदि लक्ष्य तालिका को किसी भी दृश्य द्वारा संदर्भित किया जाता है, तो तालिका अभी भी छोड़ दी जाएगी (और दृश्य बना रहेगा)।
यदि लक्ष्य तालिका को किसी विदेशी कुंजी द्वारा संदर्भित किया जाता है, तो परिणाम इस बात पर निर्भर करेगा कि क्या आपके पास विदेशी कुंजी सक्षम है, और यदि हां, तो क्या चाइल्ड टेबल में कोई डेटा है, और यदि ऐसा है, तो विदेशी कुंजी को <के साथ परिभाषित किया गया है या नहीं कोड> ON DELETE CASCADE ।
यदि आप SQLite का उपयोग करते हैं, तो SQLite DROP TABLE
देखें एक उदाहरण और एक विदेशी कुंजी द्वारा संदर्भित तालिका को छोड़ने की चर्चा के लिए।
एकाधिक टेबल ड्रॉप करें
कुछ RDBMS आपको एक DROP TABLE
. से कई तालिकाओं को छोड़ने की अनुमति देते हैं बयान।
उदाहरण:
DROP TABLE t11, t12;
इस सिंटैक्स का समर्थन करने वाले RDBMS में SQL सर्वर, MySQL, MariaDB और PostgreSQL शामिल हैं।
हालांकि, यदि आप एक विदेशी कुंजी द्वारा संदर्भित तालिका को छोड़ रहे हैं, और वह विदेशी कुंजी इसे छोड़ने से रोकती है, तो आपको मूल तालिका से पहले चाइल्ड टेबल को सूचीबद्ध करना होगा।
उदाहरण के लिए, यदि मैं उपरोक्त कथन को SQL सर्वर में चलाता हूं, तो मुझे निम्न त्रुटि मिलती है:
Msg 3726, Level 16, State 1, Line 1 Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.
इस मामले में, मैं बस अपने DROP TABLE
. में तालिकाओं के क्रम को बदल सकता हूं कथन:
DROP TABLE t12, t11;
दरअसल, इस मामले में, मुझे एक और त्रुटि मिली जो मुझे बता रही थी कि t12
मौजूद नहीं है।
यहाँ मुझे क्या मिला:
Msg 3701, Level 11, State 5, Line 1 Cannot drop the table 't12', because it does not exist or you do not have permission.
ऐसा इसलिए है, क्योंकि भले ही पिछला स्टेटमेंट t11
. को नहीं छोड़ सका , यह वास्तव में t12
. को छोड़ने में सफल रहा ।
और त्रुटियों की एक कॉमेडी की तरह, इस बार यह t11
. को छोड़ने में सक्षम था लेकिन नहीं t12
.
भले ही, दोनों टेबल अब हटा दिए गए हैं।
लेकिन अगर आप पहली बार ऑर्डर सही करते हैं, तो आपको इस तरह का एक संदेश प्राप्त होना चाहिए:
Commands completed successfully.
अस्थायी कीवर्ड
कुछ RDBMS (जैसे MySQL और MariaDB) एक TEMPORARY
स्वीकार करते हैं कीवर्ड।
यह DROP
. के बीच जाता है और टेबल
, इस तरह:
DROP TEMPORARY TABLE t1;
अस्थायी
का उपयोग करना कीवर्ड यह सुनिश्चित करेगा कि अस्थायी तालिका को छोड़ने का प्रयास करते समय आप गलती से एक गैर-अस्थायी तालिका नहीं छोड़ेंगे।
अस्थायी
कीवर्ड के निम्नलिखित प्रभाव हैं:
- बयान केवल
अस्थायी
ड्रॉप करता है टेबल. - कथन एक अंतर्निहित प्रतिबद्धता का कारण नहीं बनता है (
DROP TABLE
. का उपयोग करके)अस्थायी
के बिना कीवर्ड स्वचालित रूप से वर्तमान सक्रिय लेनदेन करता है)। - कोई एक्सेस अधिकार चेक नहीं किया गया है। एक
अस्थायी
तालिका केवल उसी सत्र में दिखाई देती है जिसने इसे बनाया है, इसलिए किसी जांच की आवश्यकता नहीं है।
द पर्ज क्लॉज
Oracle में एक वैकल्पिक PURGE
है क्लॉज, जिसका आप उपयोग कर सकते हैं यदि आप तालिका को छोड़ना चाहते हैं और एक ही चरण में इससे जुड़े स्थान को मुक्त करना चाहते हैं। यदि आप PURGE
specify निर्दिष्ट करते हैं , तो डेटाबेस तालिका और उसके आश्रित वस्तुओं को रीसायकल बिन में नहीं रखता है।
यह पहले टेबल को छोड़ने और फिर उसे रीसायकल बिन से निकालने के बराबर है, लेकिन यह आपको इस प्रक्रिया में एक कदम बचाने की सुविधा देता है।
ध्यान दें कि यदि आप PURGE
. निर्दिष्ट करते हैं , आप तालिका को पुनर्प्राप्त नहीं कर पाएंगे।
यदि आप PURGE
. निर्दिष्ट नहीं करते हैं , DROP
टेबल
कथन के परिणामस्वरूप अन्य वस्तुओं द्वारा उपयोग के लिए स्थान को वापस टेबल स्पेस में नहीं छोड़ा जाता है, और स्थान की गणना उपयोगकर्ता के स्थान कोटा में की जाती है।