SQL में, यदि आप किसी तालिका से एक कॉलम हटाना चाहते हैं, तो आपको ALTER TABLE
का उपयोग करना होगा DROP COLUMN
. के साथ स्टेटमेंट खंड।
यह कॉलम और उसके सभी डेटा को हटा देता है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
ALTER TABLE table_name
DROP COLUMN column_name;
कुछ RDBMS एक वैकल्पिक IF EXISTS
स्वीकार करते हैं तर्क जिसका अर्थ है कि यदि स्तंभ मौजूद नहीं है तो यह कोई त्रुटि नहीं लौटाएगा।
कुछ RDBMS वैकल्पिक CASCADE
भी स्वीकार करते हैं और RESTRICT
तर्क, जो निर्दिष्ट करते हैं कि यदि कॉलम में कोई निर्भरता है तो क्या करना है। इस पर और अधिक के लिए नीचे देखें।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
ALTER TABLE Products
DROP COLUMN ProductDescription;
यह ProductDescription
. को हटा देता है Products
. से कॉलम टेबल।
IF EXISTS
तर्क
आपके RDBMS के आधार पर, आप IF EXISTS
. का उपयोग करने में सक्षम हो सकते हैं तर्क, जो सशर्त रूप से कॉलम को तभी छोड़ता है जब वह पहले से मौजूद हो।
ऐसा करने का लाभ यह है कि यदि कॉलम मौजूद नहीं है तो आपको कोई त्रुटि नहीं मिलेगी।
उदाहरण:
ALTER TABLE Products
DROP COLUMN IF EXISTS ProductDescription;
परिवर्तन प्रतिबंधित करें
आपके RDBMS के आधार पर, आप CASCADE
. का उपयोग करने में सक्षम हो सकते हैं और RESTRICT
यह निर्दिष्ट करने के लिए तर्क कि क्या करना है यदि कॉलम में कोई निर्भरता है, जैसे कि विदेशी कुंजी या विचार।
RESTRICT
आम तौर पर डिफ़ॉल्ट व्यवहार होता है, इसलिए यदि आप इनमें से किसी भी तर्क को निर्दिष्ट नहीं करते हैं, तो डीबीएमएस कॉलम को छोड़ने से इंकार कर देगा यदि कोई आश्रित वस्तु है।
उदाहरण:
ALTER TABLE Products
DROP COLUMN ProductDescription RESTRICT;
उपरोक्त कथन का उपयोग करते समय, यदि कॉलम में कोई निर्भरता है, तो ड्रॉप ऑपरेशन विफल हो जाएगा, और आपको एक त्रुटि मिलेगी।
एक दृश्य द्वारा संदर्भित तालिका को छोड़ने का प्रयास करते समय मुझे PostgreSQL में त्रुटि मिलती है:
cannot drop column productdescription of table products because other objects depend on it
कैस्केड द चेंज
CASCADE
का उपयोग करना विकल्प किसी भी आश्रित वस्तु को गिरा देगा।
अगर मैं पिछले उदाहरण को CASCADE
. में बदल दूं तो यहां क्या होगा? :
ALTER TABLE Products
DROP COLUMN ProductDescription CASCADE;
परिणाम:
NOTICE: drop cascades to view vproducts Commands completed successfully
इस मामले में, कॉलम हटा दिया गया था और मुझे एक संदेश मिला जिसमें बताया गया था कि दृश्य को vproducts
कहा जाता है भी गिरा दिया गया था।
CASCADE
और RESTRICT
PostgreSQL में समर्थित हैं, लेकिन SQL सर्वर या MySQL में नहीं। दोनों कीवर्ड मारियाडीबी में उपयोग करने में सक्षम हैं लेकिन उनका कोई प्रभाव नहीं है।
Oracle एक CASCADE CONSTRAINTS
. स्वीकार करता है क्लॉज जो सभी विदेशी कुंजी बाधाओं को छोड़ देता है जो गिराए गए स्तंभों पर परिभाषित प्राथमिक और अद्वितीय कुंजियों के साथ-साथ गिराए गए स्तंभों पर परिभाषित सभी बहु-स्तंभ बाधाओं को संदर्भित करता है।
एकाधिक कॉलम छोड़ें
कुछ RDBMs आपको एक ALTER TABLE
. में कई कॉलम छोड़ने की अनुमति देते हैं बयान। वाक्य रचना RDBMS के बीच भिन्न होती है।
SQL सर्वर में, आप बस प्रत्येक कॉलम को अल्पविराम से अलग करके सूचीबद्ध कर सकते हैं:
ALTER TABLE t1
DROP COLUMN c1, c2;
अन्य RDBMS (जैसे MySQL और PostgreSQL) में, आपको DROP COLUMN
को फिर से लिखना होगा प्रत्येक कॉलम के लिए:
ALTER TABLE t1
DROP COLUMN c1, DROP COLUMN c2;
ध्यान दें कि यह सिंटैक्स SQL का एक्सटेंशन है, और यह केवल एक DROP
वाले SQL मानक के अनुरूप नहीं है खंड प्रति ALTER TABLE
बयान।
अंतिम कॉलम छोड़ें
कुछ आरडीबीएम आपको तालिका में अंतिम कॉलम छोड़ने की अनुमति देते हैं, इसलिए बिना कॉलम वाली एक खाली तालिका छोड़ देते हैं। यह SQL मानक का एक विस्तार है (जो शून्य-स्तंभ तालिकाओं की अनुमति नहीं देता है)।
उदाहरण के लिए, PostgreSQL में, मैंने तालिका में अंतिम शेष कॉलम को छोड़ने के लिए निम्न कथन का उपयोग किया
ALTER TABLE t1
DROP COLUMN c3;
परिणाम:
Commands completed successfully
लेकिन SQL सर्वर में, अगर मैं ऐसा ही करता हूँ:
ALTER TABLE t1
DROP COLUMN c1, c2, c3;
परिणाम:
Msg 4923, Level 16, State 1, Line 1 ALTER TABLE DROP COLUMN failed because 'c3' is the only data column in table 't1'. A table must have at least one data column.
ध्यान दें कि इस त्रुटि संदेश के शब्दों के बावजूद, c3 एकमात्र शेष कॉलम नहीं था। वास्तव में तीन स्तंभ थे। हालाँकि, c3 अंतिम शेष होता यदि अन्य दो को हटा दिया गया होता। इस मामले में, तीन स्तंभों में से कोई भी वास्तव में गिराया नहीं गया था।
किसी भी तरह, भले ही मैंने अन्य दो को छोड़ दिया हो, SQL सर्वर अंतिम को छोड़ने से इंकार कर देगा।
MySQL भी तालिका में अंतिम कॉलम को छोड़ने से इंकार कर देता है।
यदि आपका इरादा तालिका को गिराने का है, तो DROP TABLE
. का उपयोग करें ।
RDBMS द्वारा प्रतिबंध
हालांकि मूल DROP COLUMN
अधिकांश प्रमुख RDBMS में सिंटैक्स बहुत समान है, प्रत्येक RDBMS के लिए अपने स्वयं के प्रतिबंध होते हैं कि कोई कॉलम कब गिराया जाएगा या नहीं।
यहाँ कुछ प्रमुख RDBMS से कुछ प्रतिबंध दिए गए हैं।
एसक्यूएल सर्वर
एक कॉलम तब छोड़ा नहीं जा सकता जब:
- इंडेक्स में उपयोग किया जाता है, चाहे कुंजी कॉलम के रूप में या
INCLUDE
के रूप में CHECK
में उपयोग किया जाता है ,FOREIGN KEY
,UNIQUE
, याPRIMARY KEY
बाधा।- एक डिफ़ॉल्ट के साथ जुड़ा हुआ है जिसे
DEFAULT
. के साथ परिभाषित किया गया है कीवर्ड, या किसी डिफ़ॉल्ट ऑब्जेक्ट के लिए बाध्य। - एक नियम के लिए बाध्य।
SQL सर्वर के लिए स्रोत:https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql
MySQL
यदि किसी तालिका से कॉलम हटा दिए जाते हैं, तो कॉलम भी किसी भी इंडेक्स से हटा दिए जाते हैं, जिसका वे एक हिस्सा हैं। यदि अनुक्रमणिका बनाने वाले सभी स्तंभ हटा दिए जाते हैं, तो अनुक्रमणिका भी गिर जाती है।
MySQL के लिए स्रोत:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
पोस्टग्रेएसक्यूएल
कॉलम को शामिल करने वाले इंडेक्स और टेबल की कमी को भी स्वचालित रूप से हटा दिया जाएगा।
यदि कॉलम को हटाने से आंकड़ों में केवल एक कॉलम के लिए डेटा होगा, तो ड्रॉप किए गए कॉलम को संदर्भित करने वाले बहुभिन्नरूपी आंकड़े भी हटा दिए जाएंगे।
आपको CASCADE
. का उपयोग करना होगा यदि तालिका के बाहर कुछ भी कॉलम पर निर्भर करता है, उदाहरण के लिए, विदेशी कुंजी या दृश्य।
PostgreSQL के लिए स्रोत:https://www.postgresql.org/docs/current/sql-altertable.html
SQLite
SQLite DROP COLUMN
का समर्थन नहीं करता है वाक्य - विन्यास। आप SQLite में एक कॉलम नहीं छोड़ सकते।
यदि आपको SQLite में एक कॉलम छोड़ने की आवश्यकता है, तो यह अनुशंसा की जाती है कि आप SQLite दस्तावेज़ीकरण में अनुशंसित 12 चरणों की प्रक्रिया का पालन करें।
SQLite के लिए स्रोत:https://sqlite.org/lang_altertable.html#otheralter
मारियाडीबी
यदि कॉलम किसी इंडेक्स का हिस्सा है, तो कॉलम उनसे हटा दिया जाएगा, सिवाय इसके कि आप एक ही समय में समान नाम के साथ एक नया कॉलम जोड़ते हैं। यदि अनुक्रमणिका के सभी स्तंभ हटा दिए गए हैं तो अनुक्रमणिका हटा दी जाएगी। यदि स्तंभ का उपयोग किसी दृश्य या ट्रिगर में किया गया था, तो अगली बार दृश्य या ट्रिगर तक पहुंचने पर आपको एक त्रुटि प्राप्त होगी।
मारियाडीबी 10.2.8 से, एक बहु-स्तंभ UNIQUE
का हिस्सा होने वाले कॉलम को छोड़ना बाधा की अनुमति नहीं है।
मारियाडीबी RESTRICT
स्वीकार करता है और CASCADE
अन्य डेटाबेस सिस्टम से पोर्टिंग को आसान बनाने के लिए, लेकिन मारियाडीबी में, वे कुछ नहीं करते हैं।
मारियाडीबी 10.4.0 तत्काल DROP COLUMN
का समर्थन करता है . DROP COLUMN
एक अनुक्रमित कॉलम का अर्थ होगा DROP INDEX
(और एक गैर-UNIQUE
. के मामले में बहु-स्तंभ अनुक्रमणिका, संभवतः ADD INDEX
) इनकी अनुमति नहीं होगी ALGORITHM=INSTANT
. के साथ , लेकिन पहले के विपरीत, उन्हें ALGORITHM=NOCOPY
. के साथ अनुमति दी जा सकती है ।
मारियाडीबी के लिए स्रोत:https://mariadb.com/kb/en/alter-table/#drop-column