mysql delete statement delete command syntax
यह ट्यूटोरियल बताता है कि डेटा को टेबल से हटाने के लिए MySQL DELETE स्टेटमेंट का उपयोग कैसे करें या ट्रंक और डिलीट कमांड्स के बीच संपूर्ण तालिका और अंतर को हटाएं:
MySQL में, DELETE एक डेटा हेरफेर भाषा या DML है, जैसा कि हम जानते हैं।
जैसा कि नाम से ही पता चलता है, कमांड का उपयोग टेबल से पंक्तियों को हटाने के लिए किया जाता है। इस आदेश का उपयोग करके, हम एक एकल लेनदेन में एक या अधिक अवांछित पंक्तियों को हटा सकते हैं। DELETE कमांड का उपयोग करके रिकॉर्ड को टेबल से हटाने के कई तरीके हैं।
java एक अरै से एक एलिमेंट को कैसे हटाते है
इस ट्यूटोरियल में, हम सरल उदाहरणों के साथ इन सभी पर विस्तार से चर्चा करेंगे।
आप क्या सीखेंगे:
- MySQL DELETE कमांड
- TRUNCATE और DELETE कथन के बीच अंतर
- रेफ़रेंशियल इंटीग्रिटी एंड इट इम्पैक्ट ऑन DELETE
- अक्सर पूछे जाने वाले प्रश्न और उत्तर
- निष्कर्ष
MySQL DELETE कमांड
आगे बढ़ने से पहले ध्यान रखने के लिए एक महत्वपूर्ण कारक है। DELETE कमांड का उपयोग करके हम जो भी पंक्ति या एकाधिक पंक्तियाँ हटाते हैं, उन्हें कभी भी पुनर्प्राप्त नहीं किया जा सकता है।
इस प्रकार, ऐसे परिदृश्यों से बचने के लिए जहां गलती से कोई पंक्ति हटा दी जाती है, DELETE स्टेटमेंट निष्पादित करने से पहले तालिका का बैकअप लेना उचित है। हम बाद में किसी भी गलती के मामले में तालिका को पुनर्स्थापित करने के लिए इस बैकअप का उपयोग कर सकते हैं।
ध्यान दें: हम MySQL संस्करण 8.0 का उपयोग कर रहे हैं। आप इससे डाउनलोड कर सकते हैं यहां ।
MySQL Delete Syntax:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
सिंटैक्स स्पष्टीकरण:
- वाक्यविन्यास 'DELETE FROM' कीवर्ड से शुरू होता है, जिससे MySQL सर्वर को प्रदर्शन की जाने वाली गतिविधि के प्रकार के बारे में सूचित किया जाता है। यह एक अनिवार्य कीवर्ड है और इसे छोड़ा नहीं जा सकता है।
- इसके बाद टेबल का नाम आता है जिसमें DELETE ऑपरेशन करना होता है। यह भी अनिवार्य है और इसे छोड़ा नहीं जा सकता है। हम यहां एक या एक से अधिक तालिका नामों का उल्लेख कर सकते हैं।
- अगला, हम किसी भी स्थिति का उल्लेख कर सकते हैं जो हटाए जाने वाली पंक्तियों की पात्रता को नियंत्रित करती है। यह एक वैकल्पिक क्लॉज है। यहाँ खोजशब्द कहाँ है।
- WHERE क्लॉज द्वारा अनुसरण किया जाने वाला ORDER BY क्लॉज है, जो एक कॉलम (ओं) पर चढ़ते या उतरते हुए किसी विशेष क्रम में हटाए जाने वाली पंक्तियों को लागू करता है। यह एक वैकल्पिक क्लॉज है।
- सीमा खंड आदेश द्वारा आदेश का पालन करता है। यह उन पंक्तियों की संख्या पर एक सीमा रखता है जिन्हें DELETE विवरण तालिका से हटा सकता है।
संशोधित वक्तव्य में संशोधक
# 1) LOW_PRIORITY:
यह संशोधक MySQL Engine को DELETE स्टेटमेंट के निष्पादन में विलंब करने के लिए सूचित करता है जब तक कि उस समय से कोई तालिका पढ़ने से कोई कनेक्शन नहीं है जिसे हम DELETE से प्रयास कर रहे हैं।
इससे उस तालिका पर किए जाने वाले अन्य सभी कार्यों में निरंतरता प्राप्त करने में मदद मिलती है। यह टेबल लॉकिंग मुद्दों से बचने में भी मदद करता है।
# 2) क्विक:
जब भी हम किसी पंक्ति को हटाते हैं, तो संबंधित अनुक्रमणिका भी हटा दी जाती है। DELETE स्टेटमेंट के निष्पादन के समय स्पेस को पुनःप्राप्त करने से प्रोसेसर समय की खपत होती है। यदि हम QUICK कीवर्ड का उपयोग करते हैं, तो संबंधित अनुक्रमणिका स्थान अप्रयुक्त रहता है और इसका उपयोग तब किया जा सकता है जब नए रिकॉर्ड जो अनुक्रमणिका रेंज को सूट करते हैं जो पहले हटाए गए थे।
उदाहरण के लिए, एक कर्मचारी तालिका पर विचार करें जहां कर्मचारी आईडी इंडेक्स है। जब भी कोई कर्मचारी किसी संगठन को छोड़ता है, तो हमें संबंधित रिकॉर्ड को हटाने की आवश्यकता होती है। यदि हम क्विक क्लॉज का उपयोग करते हैं तो संबंधित सूचकांक स्थान अप्रयुक्त रहेगा।
जब एक नया कर्मचारी जुड़ता है, तो उसे एक नया कर्मचारी नंबर मिलेगा, न कि उसी व्यक्ति का नंबर। ऐसे उदाहरणों में, क्विक का उपयोग करना उचित नहीं है।
MYSQL DELETE उदाहरण
नीचे दिए गए एक नमूना तालिका MYSQL में बनाया गया है।
स्कीमा का नाम: शांत
तालिका नाम: कर्मचारियों
स्तंभ नाम:
एम्पैनम; कर्मचारी संख्या के लिए पूर्णांक मान जोड़ता है।
उपनाम: कर्मचारी के अंतिम नाम के लिए वार्चर मान रखता है।
संतोष: कर्मचारी के पहले नाम के लिए वार्चर मान रखता है।
ईमेल: कर्मचारी की ईमेल आईडी के लिए वैरिएक मान को धारण करता है।
विभाग; एक कर्मचारी से संबंधित विभाग की आईडी के लिए वैरिएक धारण करता है।
वेतन: प्रत्येक कर्मचारी के वेतन के दशमलव मान को धारण करता है।
आरंभ करने की तिथि: कर्मचारी के शामिल होने की तारीख के लिए दिनांक मानों को जोड़ता है।
स्कीमा का नाम: शांत
तालिका नाम: कर्मचारियों_हिस्ट्री
स्तंभ नाम:
एम्पैनम; कर्मचारी संख्या के लिए पूर्णांक मान प्राप्त करता है।
उपनाम: कर्मचारी के अंतिम नाम के लिए वार्चर मान रखता है।
संतोष: कर्मचारी के पहले नाम के लिए वार्चर मान रखता है।
ईमेल: कर्मचारी की ईमेल आईडी के लिए वैरिएक मान को धारण करता है।
विभाग; एक कर्मचारी से संबंधित विभाग की आईडी के लिए वैरिएक धारण करता है।
वेतन: प्रत्येक कर्मचारी के वेतन के दशमलव मान को धारण करता है।
आरंभ करने की तिथि: कर्मचारी के शामिल होने की तिथि के लिए दिनांक मान रखता है।
स्कीमा का नाम: शांत
तालिका नाम: विभागों
स्तंभ नाम:
विभाग; एक संगठन के भीतर विभाग की आईडी के लिए वॉर्डरच।
Faridabad: उस शहर का नाम धारण करता है जिसमें विभाग काम करते हैं।
देश: शहर के अनुरूप देश का नाम रखता है।
बक्शीश: बोनस का प्रतिशत मूल्य प्राप्त करता है।
MySQL Delete सिंगल रो
रिकॉर्ड को एक-एक करके हटाने से तालिका से रिकॉर्ड हटाने का पहला और आसान तरीका, एक बहुत मजबूत WHERE क्लॉज का उपयोग करके जो केवल एक उपयुक्त रिकॉर्ड को हटा देता है। इसका उपयोग तालिका से समान प्रकार की पंक्तियों को हटाने के लिए किया जा सकता है।
डिलीट स्टेटमेंट और उसके निष्पादन के बारे में विस्तार से जाने दें।
यहां हम try क्रिस नोलन ’नामक एक कर्मचारी को 1013 के रूप में कर्मचारी संख्या के साथ आजमाएंगे और हटाएंगे।
जैसा कि ऊपर चित्र में दर्शाया गया है, DELETE कथन को सफलतापूर्वक निष्पादित किया गया है और कर्मचारी की तालिका से एक पंक्ति हटा दी गई है।
उत्पादन नीचे दिया गया कथन उस समय को दिखाता है जिस पर कथन निष्पादित किया गया था, MySQL कथन जिसे निष्पादित किया गया था और जो पंक्तियों की संख्या प्रभावित हुई थी।
कृपया बहुत निश्चित रहें, यहाँ WHERE क्लॉज़ के बारे में। यदि WHERE क्लॉज गलत है या यदि आप WHERE क्लॉज होने से चूक गए हैं, तो इसके परिणामस्वरूप डेटा हानि हो सकती है। ऐसी स्थितियों से बचने के लिए, उत्पादन में, समय-समय पर डेटा बैकअप या अनलोड करने का अभ्यास होता है।
इस DELETE विवरण के आउटपुट को सत्यापित करने के लिए, इस सारणी पर SELECT कथन को 1013 के रूप में निष्पादित करें।
सभी स्तंभों के लिए आउटपुट परिणाम NULL मान दिखाते हैं, जिसका अर्थ है कि इस तरह के एक समरूप के लिए कोई रिकॉर्ड मौजूद नहीं है। नीचे दिए गए क्वेरी के आउटपुट से पता चलता है कि 0 पंक्ति (ओं) को वापस कर दिया गया है, जिसका अर्थ है कि ऊपर दिए गए DELETE विवरण के निष्पादन के द्वारा रिकॉर्ड को हटा दिया गया है।
प्रश्न:
DELETE FROM employees WHERE empNum = 1013 ;
टेबल स्नैपशॉट के बाद:
एम्पैनम | उपनाम | संतोष | ईमेल | विभाग | वेतन |
---|---|---|---|---|---|
। | यह TRUNCATE की तुलना में अपेक्षाकृत धीमा है, जब तालिका से संपूर्ण डेटा को हटाने के लिए तुलना की जाती है। | यह DELETE की तुलना में अपेक्षाकृत तेज़ है, जब तालिका से संपूर्ण डेटा हटाने के लिए तुलना की जाती है। | |||
शून्य | शून्य | शून्य | शून्य | शून्य | शून्य |
MySQL DELETE का उपयोग करके आदेश और सीमा खंड
आदेश द्वारा और सीमा दो खंड हैं जिन पर हमने ऊपर चर्चा की है। पूर्व उस आदेश को तय करने में मदद करता है जिसमें अभिलेखों को शुद्ध किया जाना चाहिए, या तो आरोही में अभिलेख को हटाएं या अवरोही क्रम में वेतन के साथ रिकॉर्ड को हटा दें। उत्तरार्द्ध रिकॉर्ड की संख्या को सीमित करने में मदद करता है जिसे यह लेनदेन हटा सकता है।
उदाहरण के लिए, यदि हम विभाग के नंबर 4 से संबंधित केवल 2 कर्मचारियों को हटाना चाहते हैं, जो उच्च वेतन लेने वाले हैं। फिर इस क्वेरी के तीन भाग हैं।
- प्रथम, हमें कर्मचारियों को विभाग से नंबर 4 को शुद्ध करने की आवश्यकता है। यह एक WHERE क्लॉज द्वारा नियंत्रित किया जाएगा।
- अगला, हमें उन कर्मचारियों को शुद्ध करने की आवश्यकता है जो उच्च वेतन कमा रहे हैं। इसे अवरोही क्रम में वेतन स्तंभ पर ORDER BY क्लॉज द्वारा नियंत्रित किया जाएगा।
- अंततः, हमें केवल दो कर्मचारियों को शुद्ध करने की आवश्यकता है। यह लिमिट खंड द्वारा नियंत्रित किया जाएगा।
चलो DELETE क्वेरी पर एक नज़र डालें और परिणाम देखें। ऐसा करने से पहले, आइए जानें कि वे कौन से सटीक रिकॉर्ड हैं जिन्हें हम हटाना चाहते हैं। हम रिकॉर्ड प्राप्त करने के लिए एक सेलेक्ट स्टेटमेंट के साथ उपरोक्त शर्तों का उपयोग करेंगे, जिन्हें हम हटाना चाहते हैं और बाद में उसी क्वेरी को सत्यापित करने के लिए निष्पादित करते हैं कि उन रिकॉर्ड्स को हटाया गया है या नहीं।
उपरोक्त चयन क्वेरी में, हमने उन सभी तीन स्थितियों को संतुष्ट किया है, जिनके बारे में हमने WHERE, ORDER BY और LIMIT खंड का उपयोग करके बात की थी। क्वेरी ने हमें 2 रिकॉर्ड दिए, एक एम्पेनम 1010 के साथ और दूसरा 1007 के साथ। अब, हम यह सुनिश्चित करने के लिए DELETE क्वेरी निष्पादित करेंगे कि ये दो रिकॉर्ड हटा दिए गए हैं।
जैसा कि ऊपर चित्र में दर्शाया गया है, DELETE कथन ने सफलतापूर्वक निष्पादित किया है और कर्मचारी की तालिका से दो पंक्तियों को हटा दिया है। उत्पादन नीचे दिया गया कथन उस समय को दिखाता है जिस पर कथन निष्पादित किया गया था, MySQL कथन जिसे निष्पादित किया गया था और जो पंक्तियों की संख्या प्रभावित हुई थी।
इस DELETE विवरण के आउटपुट को सत्यापित करने के लिए, आइए चयन करें empNum 1010 और 1007 के लिए निष्पादित करें। हम उसी SELECT क्वेरी का उपयोग नहीं कर सकते जैसा कि ऊपर इस्तेमाल किया गया है जो अन्य कर्मचारियों को deptNum 4 के तहत दिखाएगा।
विंडोज़ पर डेटा फ़ाइलों को देखने के लिए कैसे
आउटपुट परिणाम सभी स्तंभों के लिए पूर्ण मान दिखाता है, जिसका अर्थ है कि ऐसे कर्मचारी संख्याओं के लिए कोई रिकॉर्ड मौजूद नहीं है। उत्पादन नीचे दिए गए क्वेरी से पता चलता है कि 0 पंक्ति (ओं) को वापस कर दिया गया है, जिसका अर्थ है कि ऊपर दिए गए DELETI स्टेटमेंट के निष्पादन द्वारा रिकॉर्ड को हटा दिया गया है।
प्रश्न:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
टेबल स्नैपशॉट के बाद:
एम्पैनम | उपनाम | संतोष | ईमेल | विभाग | वेतन |
---|---|---|---|---|---|
शून्य | शून्य | शून्य | शून्य | शून्य | शून्य |
MySQL DELETE सेलेक्ट क्लॉज का उपयोग करना
अगला, हम एक तालिका से रिकॉर्ड हटाते समय SELECT क्लॉज के उपयोग से गुजरेंगे।
इस परिदृश्य पर विचार करें:
हमारे पास तालिकाओं के दो सेट हैं: कर्मचारियों और विभागों। विभाग की तालिका में एक प्राथमिक कुंजी की तरह है और कर्मचारी की तालिका में विदेशी कुंजी। इसका मतलब है कि अगर किसी कर्मचारी को एक विभाग सौंपा जाता है तो उसे विभागों की तालिका में एक विभाग से होना चाहिए।
अब, हमें उन रिकॉर्ड्स को विभाग की तालिका से हटाना होगा जहाँ अब तक कोई कर्मचारी नहीं सौंपा गया है। हम एक DELETE क्वेरी की उप-क्वेरी में एक सेलेक्ट क्लॉज होने से ऐसा कर सकते हैं।
आइए पहले उन रिकॉर्ड्स की पहचान करें जिन्हें हम हटाना चाहते हैं:
उपरोक्त चयन क्वेरी में एक सबक्वेरी है।
क्वेरी कामकाज निम्नानुसार है:
क्वेरी विभाग की तालिका से सभी रिकॉर्ड खींचती है जहां कर्मचारी की तालिका में विभाग मौजूद नहीं है। सम्मिलित होने पर दो तालिकाओं के विभाग पर उप-क्वेरी में प्रदर्शन किया जाता है।
अब DELETE क्वेरी को चलाएं और देखें कि क्या हम इन दोनों रिकॉर्ड्स को विभाग की तालिका से हटा सकते हैं क्योंकि कोई भी कर्मचारी इन विभागों को नहीं सौंपा गया है।
जैसा कि ऊपर चित्र में दिखाया गया है, डिलीट स्टेटमेंट ने डिपार्टमेंट टेबल से 2 पंक्तियों को हटा दिया है, जिसे कोई कर्मचारी नहीं सौंपा गया है।
इस DELETE विवरण के आउटपुट को सत्यापित करने के लिए, तालिका पर चयन करें और देखें कि हमारे पास आउटपुट में क्या है।
उपरोक्त सत्यापन क्वेरी का आउटपुट संदेश '0 पंक्ति (ओं) को लौटाता है'। इसका तात्पर्य है कि deptNum 6 और 7 वाली पंक्तियाँ हटा दी जाती हैं। आउटपुट NULL मान दिखाने के बजाय कोई रिकॉर्ड नहीं दिखाता क्योंकि रिकॉर्ड हटा दिए गए हैं।
प्रश्न:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL DELETE संपूर्ण डेटा तालिका से
अगला, हम उस परिदृश्य को देखेंगे जहां हमें किसी तालिका से सभी पंक्तियों या रिकॉर्ड को हटाना होगा।
उत्पादन की स्थिति में, आप ऐसी स्थिति का सामना कभी नहीं कर सकते। लेकिन विकास क्षेत्र में इस तरह की आवश्यकता होगी जहां आपको कई अलग-अलग परिदृश्यों के साथ अपने कोड का परीक्षण करना होगा और आप तालिका में मौजूद रिकॉर्ड को हटाकर परीक्षण डेटा का एक नया सेट फिर से बनाना चाहते हैं।
पहले, आइए उन डेटा पर नज़र डालें जिन्हें हम हटाने का इरादा रखते हैं। हम कर्मचारियों_हिस्ट्री तालिका से डेटा को हटाने का प्रयास करेंगे।
नीचे दी गई तालिका में वर्तमान में मौजूद डेटा है।
यहां हमारे पास कर्मचारियों की संख्या 18 है। चलिए अब आगे बढ़ते हैं और इन सभी को एक ही लेनदेन में हटाते हैं। क्वेरी लगभग उसी के समान है जिसे हमने पहले खंड में चर्चा की थी। एकमात्र परिवर्तन यह है कि हमें क्वेरी से WHERE क्लॉज़ को हटाने की आवश्यकता है ताकि उन पंक्तियों की संख्या पर कोई प्रतिबंध न लगे जिन्हें हम हटाना चाहते हैं।
जैसा कि उपरोक्त चित्र में दर्शाया गया है, डिलीट स्टेटमेंट को सफलतापूर्वक निष्पादित किया गया है और कर्मचारियों_हिस्ट्री टेबल से सभी 18 पंक्तियों को हटा दिया गया है। नीचे दिया गया आउटपुट स्टेटमेंट उस समय को दर्शाता है जिस पर स्टेटमेंट निष्पादित किया गया था, MySQL स्टेटमेंट जिसे निष्पादित किया गया था और जो पंक्तियों की संख्या प्रभावित हुई थी।
इस DELETE विवरण के आउटपुट को सत्यापित करने के लिए, तालिका पर चयन करें और देखें कि हमारे पास आउटपुट में क्या है।
आउटपुट परिणाम सभी स्तंभों के लिए पूर्ण मान दिखाता है, जिसका अर्थ है कि ऐसे कर्मचारी संख्याओं के लिए कोई रिकॉर्ड मौजूद नहीं है। नीचे दिए गए क्वेरी के आउटपुट से पता चलता है कि 0 पंक्ति (ओं) को वापस कर दिया गया है, जिसका अर्थ है कि उपरोक्त रिकॉर्ड के विवरण द्वारा सभी रिकॉर्ड हटा दिए गए हैं।
प्रश्न:
DELETE FROM employees_history ;
टेबल स्नैपशॉट के बाद:
एम्पैनम | उपनाम | संतोष | ईमेल | विभाग | वेतन |
---|---|---|---|---|---|
शून्य | शून्य | शून्य | शून्य | शून्य | शून्य |
MySQL DELETE संपूर्ण तालिका
अब, हम उस परिदृश्य को देखेंगे जहां हमें तालिका को स्वयं हटाना होगा। SQL शब्दों में, हम इसे तालिका को ड्रॉप कहते हैं। इससे कोई फर्क नहीं पड़ता कि तालिका में कोई डेटा है या नहीं। यह बस डेटा के साथ तालिका को छोड़ देगा यदि कोई हो।
उपरोक्त अनुभाग में, हमने कर्मचारियों_हिस्ट्री टेबल से डेटा हटा दिया। इस अनुभाग में, हम कर्मचारी_होस्टर टेबल को स्वयं छोड़ देंगे।
इसके आउटपुट के साथ कमांड निम्नलिखित है:
जैसा कि उपरोक्त चित्र में दर्शाया गया है, DROP स्टेटमेंट को सफलतापूर्वक निष्पादित किया गया है और MySQL डाटाबेस के सिस्टम कैटलॉग से टेबल के कर्मचारियों_हिस्टार को हटा दिया गया है।
यदि आप संदेश को देखते हैं, तो यह '0 पंक्ति (ओं) को प्रभावित करेगा'। ऐसा इसलिए है क्योंकि हमने पिछले अनुभाग में सभी 18 पंक्तियों को हटा दिया था। यदि इस तालिका में कोई पंक्तियाँ होतीं तो उन पंक्तियों की संख्या प्रभावित होती, जो हटा दी गई होती हैं।
इस DROP कथन के आउटपुट को सत्यापित करने के लिए, तालिका पर चयन करें और देखें कि आउटपुट में हमारे पास क्या है।
उपरोक्त सत्यापन क्वेरी का आउटपुट संदेश कहता है कि तालिका मौजूद नहीं है। यह तालिका छोड़ने के लिए उपरोक्त DROP कथन के हमारे निष्पादन को मान्य करता है।
प्रश्न:
DROP TABLE employees_history ;
MySQL ट्रंकट कमांड
हमने पहले से ही DELETE कमांड का उपयोग करते हुए तालिका से सभी रिकॉर्ड को हटाने पर चर्चा की। TRUNCATE कथन का उपयोग करके भी इसे प्राप्त किया जा सकता है।
इस उदाहरण के लिए, आइए कर्मचारियों_हिस्ट्री तालिका को फिर से बनाएं और इसे डेटा के साथ फिर से आबाद करें। टी वह निम्नलिखित दो प्रश्न हैं जिन्हें तालिका को फिर से बनाने और इसे फिर से आबाद करने के लिए निष्पादित किया गया है:
प्रश्न:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
यह है कि कर्मचारियों_हिस्ट्री तालिका अब डेटा के साथ कैसे दिखती है।
अगला, हम TRUNCATE कथन का उपयोग करके इस तालिका के सभी रिकॉर्ड निकाल देंगे।
जैसा कि चित्र में दिखाया गया है, क्वेरी को सफलतापूर्वक निष्पादित किया गया है। यदि आप 'संदेश' भाग को करीब से देखते हैं, तो आप पाएंगे कि यह '0 पंक्ति (ओं) को प्रभावित' कहता है। हालाँकि, हम जानते हैं कि इस तालिका में 15 पंक्तियाँ हैं। फिर कैसे आना शून्य दिखाता है?
कारण: ट्रंकैट स्टेटमेंट इस बात पर ध्यान नहीं देता है कि इसके निष्पादन से कितनी पंक्तियाँ प्रभावित हो रही हैं। यह केवल तालिका को खाली करता है। यह DELETE और TRUNCATE कथनों के बीच महत्वपूर्ण अंतर है।
आइए, TR_CATE कथन के निष्पादन को कर्मचारी_होस्टर टेबल पर एक सेलेक्ट क्वेरी को निष्पादित करके सत्यापित करें।
जैसा कि ऊपर चित्र में दिखाया गया है, क्वेरी में कोई पंक्तियाँ नहीं हैं और साथ ही सभी कॉलम NULL मान दिखा रहे हैं, जिसका अर्थ है कि TRUNCATE कथन जिसे हमने पहले निष्पादित किया था, तालिका से सभी रिकॉर्ड हटा दिए हैं।
प्रश्न:
TRUNCATE TABLE employees_history ;
TRUNCATE और DELETE कथन के बीच अंतर
श्री नं | हटाएँ | काट-छांट |
---|---|---|
1 | यह एक डीएमएल (डेटा हेरफेर भाषा) है। | यह एक DDL (डेटा परिभाषा भाषा) है। |
दो | जब हम DELETE कमांड का उपयोग करते हैं, तो टेबल पर कोई भी सक्रिय ट्रिगर सक्रिय हो जाता है। | जब हम TRUNCATE कमांड का उपयोग करते हैं तो टेबल पर कोई भी ट्रिगर ट्रिगर सक्रिय नहीं होता है। |
३ | यदि कोई विदेशी कुंजी बाधा हो तो भी एक रिकॉर्ड को हटाया जा सकता है। | यदि कोई विदेशी कुंजी बाधा हो तो तालिका से रिकॉर्ड को छोटा नहीं किया जा सकता है। |
४ | तालिका पुन: प्रारंभ नहीं होगी। | टेबल को फिर से लगाया जाएगा। |
५ | जहां क्लॉज का उपयोग किया जा सकता है। | जहां क्लॉज का उपयोग नहीं किया जा सकता है। |
६ | यह एक बार में एक रिकॉर्ड को हटाता है और लॉग में हटाए गए रिकॉर्ड की कुल संख्या का ट्रैक रखता है। | यह एक साथ सभी रिकॉर्ड को शुद्ध करता है और हटाए गए रिकॉर्ड की संख्या का ट्रैक नहीं रखता है। |
रेफ़रेंशियल इंटीग्रिटी एंड इट इम्पैक्ट ऑन DELETE
हमारे होने से पहले, आइए देखें संदर्भात्मक अखंडता या आरआई या विदेशी कुंजी बाधाओं क्या है?
विदेशी कुंजी बाधाएं माता-पिता और बच्चे की मेज के बीच संबंध या संबंध स्थापित करने के बारे में हैं। इससे डेटा को एक-दूसरे से जुड़े तालिकाओं के पार-संदर्भित करने में मदद मिलती है। एक पैरेंट टेबल में कई चाइल्ड टेबल और इसके विपरीत हो सकते हैं।
उच्च स्तरीय प्रोग्रामिंग भाषाओं के 5 उदाहरण
उदाहरण के लिए, जिन दो तालिकाओं पर हम अब तक चर्चा कर रहे हैं यानी कर्मचारी और विभाग, एक विदेशी कुंजी बाधा का उपयोग करते हुए एक दूसरे से जुड़े हुए हैं। यह अवरोध एक स्तंभ, आमतौर पर प्राथमिक कुंजी, दो स्तंभों को जोड़ने वाले प्रमुख स्तंभ के रूप में स्थापित किया जाता है।
विभाग की तालिका में विभाग के स्तंभ को कर्मचारी की तालिका में विभाग के स्तंभ से जोड़ा गया है। इस मामले में, विभाग पेरेंट टेबल हैं और कर्मचारी चाइल्ड टेबल है।
लेकिन, यह DELETE कथनों को कैसे प्रभावित करता है?
MySQL या किसी भी डेटाबेस में, माता-पिता या बच्चे की तालिकाओं से रिकॉर्ड हटाते समय कुछ निश्चित परिदृश्यों को संभाला जाना चाहिए।
कई संदर्भ विकल्प हैं जिन पर हम चर्चा कर सकते हैं:
(1) DELETE CASCADE पर: नियम कहता है कि हम माता-पिता की मेज से एक पंक्ति को नहीं हटा सकते हैं यदि इसका कोई संदर्भ है या बच्चे की किसी तालिका में संबंधित पंक्ति है। हालाँकि, अगर किसी अभिभावक की तालिका में कुछ बच्चे तालिकाएँ हैं, तो यह एक थकाऊ काम है कि पहले प्रत्येक बच्चे की तालिका से और फिर मूल तालिका से रिकॉर्ड को हटाया जाए।
इसके लिए, ON DELETE CASCADE नामक एक वर्कअराउंड है। यह एक ऐसा क्लॉज है जो प्रत्येक बच्चे की तालिकाओं के क्रिएट स्टेटमेंट में जोड़ा जाता है। इसलिए, जब भी हम कहते हैं कि मूल तालिका से एक पंक्ति हटाएं, तब MySQL इंजन पहले बच्चे की तालिकाओं में उस पंक्ति के संदर्भों की पहचान करेगा और उन रिकॉर्डों को हटा देगा और अंत में मूल तालिका से रिकॉर्ड हटा देगा।
# 2) कोई कार्रवाई नहीं: यह एक डिफ़ॉल्ट विकल्प है। यदि DELETE स्टेटमेंट का निष्पादन किसी ऐसे रिकॉर्ड को हटाने का प्रयास करता है, जिसमें किसी भी चाइल्ड टेबल में संदर्भ हैं, तो इस विकल्प के साथ स्टेटमेंट का निष्पादन रुक जाएगा और MySQL लेनदेन अंतिम प्रतिबद्ध बिंदु पर वापस ले जाया जाएगा।
# 3) RESTRICT: RESTRICT और NO ACTION की फंक्शनिंग एक जैसी है। यह निष्पादन को रोक देगा और एक रोलबैक जारी करेगा।
# 4) पूरा सेट करें: यदि डिलीट स्टेटमेंट का निष्पादन किसी ऐसे रिकॉर्ड को हटाने का प्रयास करता है, जिसका चाइल्ड टेबल में से किसी में भी संदर्भ है, तो यह विकल्प NULL के रूप में सभी चाइल्ड टेबल में कॉलम वैल्यू को अपडेट कर देगा और एक बार हो जाने के बाद, यह पेरेंट से रिकॉर्ड को हटा देगा तालिका।
# 5) निर्धारित करें: यदि DELETE स्टेटमेंट का निष्पादन किसी ऐसे रिकॉर्ड को हटाने का प्रयास करता है, जिसमें किसी भी बच्चे के टेबल में संदर्भ हैं, तो यह विकल्प कॉलम वैल्यू को टेबल के CREATE स्टेटमेंट में परिभाषित मान के अनुसार अपडेट करेगा।
अक्सर पूछे जाने वाले प्रश्न और उत्तर
Q # 1) MySQL में टेबल से डेटा कैसे हटाएं?
उत्तर: डेटा की केवल चयनित पंक्ति को हटाने के लिए डिलीट कमांड का सिंटैक्स नीचे दिया गया है।
DELETE FROM table_name WHERE condition;
Q # 2) MySQL में टेबल से सभी डेटा कैसे हटाएं?
उत्तर: तालिका से सभी पंक्तियों को हटाने के लिए DELETE कमांड का सिंटैक्स है:
DELETE * FROM table_name;
Q # 3) MySQL में डेटाबेस से टेबल कैसे डिलीट करें?
उत्तर: डेटाबेस से तालिका को हटाने के लिए ड्रॉप कमांड का उपयोग किया जा सकता है। उपयोगकर्ता उस तालिका के साथ table_name को बदल सकता है जिसे हटाए जाने की आवश्यकता है।
DROP TABLE table_name;
Q # 4) MySQL में डेटाबेस को कैसे डिलीट करें?
उत्तर: डेटाबेस को हटाने के लिए ड्रॉप कमांड का उपयोग किया जा सकता है।
DROP Database db_name;
उपयोगकर्ता डेटाबेस नाम के साथ db_name को बदल सकते हैं जिसे हटाना होगा।
Q # 5) MySQL में DELETE CASCADE क्या है?
उत्तर: जब पैरेंट रिकॉर्ड डिलीट हो जाता है, तो ON DELETE CASCADE डिलीट होने के लिए एक मैचिंग चाइल्ड रिकॉर्ड बनाता है। इस प्रकार, विलोपन का प्रभाव माता-पिता से बच्चे तक पहुंच जाता है। यह कई-टेबल डिलीट करने में उपयोगी हो सकता है।
Q # 6) TRUNCATE को DDL स्टेटमेंट क्यों माना जाता है?
उत्तर: TRUNCATE कथन वास्तव में ड्रॉप और तालिका के मेटाडेटा के साथ तालिका को फिर से बनाता है। इस प्रकार, यह एक DDL कथन है।
Q # 7) क्या TRUNCATE को वापस लाया जा सकता है?
उत्तर: नहीं, यदि स्टैंडअलोन निष्पादित किया जाता है, तो TRUNCATE एक ऑटो-कमिट स्टेटमेंट है। इसका मतलब यह है कि इसे वापस नहीं लाया जा सकता क्योंकि इसके साथ ही कमिट को भी निष्पादित किया जाता है। लेकिन अगर यह लेन-देन का एक हिस्सा है, तो इसे SQL लॉग फ़ाइलों का उपयोग करके वापस लाया जा सकता है।
Q # 8) क्या DELETE स्टेटमेंट को वापस लाया जा सकता है?
उत्तर: हां, DELETE कथनों को वापस लाया जा सकता है। COMMIT करने से पहले केवल ROLLBACK कमांड निष्पादित करें।
Q # 9) क्या DELETE कमांड का उपयोग करके एक कॉलम को हटाया जा सकता है?
उत्तर: स्तंभ जोड़ या विलोपन DDL कमांड हैं। तालिका से एक स्तंभ को ड्रॉप करने के लिए एक ALTER स्टेटमेंट का उपयोग किया जाना चाहिए।
निष्कर्ष
इस ट्यूटोरियल में, हमने MySQL में DELETE स्टेटमेंट्स को निष्पादित करने के विभिन्न तरीकों को सीखा है।
संक्षेप में, हमने देखा:
- MySQL Delete सिंगल रो
- MySQL डिलीट करके ORDER BY और लिमिट क्लॉज का उपयोग करें
- MySQL Delete सेलेक्ट क्लॉज का उपयोग करना
- MySQL हटाएँ पूरी तालिका
- MySQL ट्रंकट
- TRUNCATE और DELETE कथनों के बीच अंतर
- रेफरेंशियल इंटीग्रिटी एंड इम्पैक्ट्स ऑन DELETE
हम आवश्यकता के आधार पर उपरोक्त दोनों में से किसी का भी उपयोग कर सकते हैं।
पढ़ने का आनंद लो!!
अनुशंसित पाठ
- यूनिक्स कैट कमांड सिंटैक्स, उदाहरण के साथ विकल्प
- सिंटैक्स, विकल्प और उदाहरण के साथ यूनिक्स सॉर्ट कमांड
- MySQL तालिका में सम्मिलित करें - स्टेटमेंट सिंटैक्स और उदाहरण डालें
- MongoDB उदाहरणों के साथ दस्तावेज़ को अपडेट और हटाएं
- उदाहरणों के साथ यूनिक्स में कमान काटें
- उदाहरण के साथ C ++ में नया / डिलीट ऑपरेटर्स
- MySQL अपडेट स्टेटमेंट ट्यूटोरियल - अपडेट सिंटैक्स और उदाहरण
- उदाहरणों के साथ यूनिक्स में Ls कमांड