हटाएं (एसक्यूएल)

डेटाबेस स्ट्रक्चर्ड क्वेरी लैंग्वेज (एसक्यूएल) में, DELETE स्टेटमेंट तालिका (डेटाबेस) से एक या एक से अधिक रिकॉर्ड्स को हटा देता है। समुच्चय उपसमुच्चय को एक शर्त का उपयोग करके विलोपन के लिए परिभाषित किया जा सकता है, अन्यथा सभी रिकॉर्ड हटा दिए जाते हैं। कुछ डेटाबेस#डेटाबेस प्रबंधन प्रणाली (डीबीएमएस), जैसे MySQL, समुच्चयDELETE कथन के साथ कई तालिकाओं से पंक्तियों को हटाने की अनुमति देता है (इसे कभी-कभी मल्टी-टेबल DELETE कहा जाता है)।

उदाहरण
तालिका पाई से पंक्ति (डेटाबेस) हटाएं जहां कॉलम (डेटाबेस) स्वाद लेमन मेरिंग्यू के बराबर है:

यदि ऊँचाई का मान 80 से कम है, तो पेड़ों में पंक्तियों को हटा दें।

mytable से सभी पंक्तियां हटाएं: mytable से पंक्तियाँ जहाँ स्थिति में सबक्वेरी का उपयोग करके हटाएं: मानों की सूची का उपयोग करके mytable से पंक्तियां हटाएं:

संबंधित तालिकाओं के साथ उदाहरण
मान लीजिए कि समुच्चयसाधारण डेटाबेस है जो लोगों और पतों को सूचीबद्ध करता है। समुच्चयविशेष पते पर एक से अधिक व्यक्ति रह सकते हैं और एक व्यक्ति एक से अधिक पते पर रह सकता है (यह अनेक-से-अनेक (डेटा मॉडल)|अनेक-से-अनेक संबंध का समुच्चयउदाहरण है)। निम्नलिखित डेटा के साथ डेटाबेस में केवल तीन टेबल, व्यक्ति, पता और पीए हैं:

पीए टेबल व्यक्ति और एड्रेस टेबल से संबंधित है, यह दर्शाता है कि जो, बॉब और ऐन सभी 2001 मेन स्ट्रीट पर रहते हैं, लेकिन जो पिको बुलेवार्ड पर भी निवास करता है।

डेटाबेस से जो को हटाने के लिए, दो विलोपन निष्पादित किए जाने चाहिए:

संदर्भित सत्यनिष्ठा बनाए रखने के लिए, जो के रिकॉर्ड को व्यक्ति और पिता दोनों से हटा दिया जाना चाहिए। अलग-अलग संबंधपरक डेटाबेस प्रबंधन प्रणालियों में अखंडता को बनाए रखने के तरीके अलग-अलग हो सकते हैं। यह हो सकता है कि केवल तीन तालिकाओं से परे, डेटाबेस को समुच्चयट्रिगर के साथ भी स्थापित किया गया हो ताकि जब भी किसी व्यक्ति से कोई पंक्ति हटाई जाए तो किसी भी लिंक की गई पंक्तियों को पा से हटा दिया जाएगा। फिर पहला कथन: स्वचालित रूप से दूसरे को ट्रिगर करेगा:

विशेषताएं

 * यह समुच्चयडीएमएल (डेटा मैनीपुलेशन लैंग्वेज) कमांड है, इसलिए इस कमांड के लिए निम्नलिखित कमांड का उपयोग किया जाता है: COMMIT और ROLLBACK
 * तालिका से सभी या कुछ रिकॉर्ड हटा देता है, आप WHERE क्लॉज का उपयोग करके हटाए जाने वाले रिकॉर्ड को सीमित कर सकते हैं
 * तालिका में (टेबलस्पेस में) डेटा द्वारा कब्जा कर लिया गया स्थान खाली नहीं करता है
 * तालिका को निर्दिष्ट SEQUENCE मान को रीसेट नहीं करता है
 * DELETE, TRUNCATE की तुलना में बहुत धीमी गति से काम करता है
 * आप ROLLBACK कमांड का उपयोग करके रिकॉर्ड हटाने की कार्रवाई को पूर्ववत कर सकते हैं
 * DELETE के लिए समुच्चयसाझा टेबल लॉक की आवश्यकता होती है
 * आग लगा देता है
 * DELETE का उपयोग डेटाबेस लिंक के मामले में किया जा सकता है
 * DELETE हटाए गए रिकॉर्ड की संख्या लौटाता है
 * लेन-देन लॉग - DELETE को रिकॉर्ड पढ़ने, बाधाओं की जांच करने, अपडेट ब्लॉक, अपडेट इंडेक्स और फिर से / पूर्ववत करने की आवश्यकता है। इस सब में समय लगता है, इसलिए TRUNCATE की तुलना में इसमें अधिक समय लगता है
 * निष्पादन के दौरान प्रदर्शन को कम करता है - तालिका में प्रत्येक रिकॉर्ड को हटाने के लिए बंद कर दिया गया है
 * DELETE TRUNCATE स्टेटमेंट की तुलना में अधिक ट्रांजैक्शन स्पेस का उपयोग करता है
 * DELETE का उपयोग अनुक्रमित दृश्यों के साथ किया जा सकता है
 * DELETE कम मात्रा में फिर से करें और बड़ी मात्रा में पूर्ववत करें
 * DELETE ऑपरेशन अनुपयोगी इंडेक्स को फिर से प्रयोग करने योग्य नहीं बनाता है

संबंधित आदेश
तालिका से सभी पंक्तियों को हटाने में बहुत समय लग सकता है। कुछ डीबीएमएस समुच्चयट्रंकेट (एसक्यूएल) कमांड की पेशकश करें जो बहुत तेजी से काम करता है, क्योंकि यह केवल मेटाडेटा को बदलता है और आमतौर पर बाधाओं को लागू करने या ट्रिगर्स को सक्रिय करने में समय व्यतीत नहीं करता है।

DELETE केवल पंक्तियों को हटाता है। किसी तालिका को पूरी तरह से हटाने के लिए ड्रॉप (एसक्यूएल) कमांड का उपयोग किया जा सकता है।

बाहरी संबंध

 * Truncate vs Delete SQL Databases gives examples of DELETE statements features