दिलचस्प पोस्ट
क्या सेलेनियम आरसी में ब्राउज़र छिपाना संभव है? JPA / EJB कोड के साथ "पृथक इकाई त्रुटि को जारी रखने के लिए पारित" जावा जेनेरिक्स और एक साथ नंबर जोड़ना वास्तव में अच्छा, खराब यूटीएफ -8 उदाहरण परीक्षण डेटा कैसे एक div के अंदर खड़ी एक छवि को संरेखित करें? Regexp के साथ X और Y के बीच की संख्याओं को कैसे मिलान करें? एएसपी.एन.टी. एमवीसी वेबसाइट की ओर से सेवा सेवा की नई सेवा अजगर में ऑब्जेक्ट एट्रिब्यूट्स को बदलना क्यों <textarea> और <textfield> शरीर से फ़ॉन्ट परिवार और फ़ॉन्ट आकार नहीं ले रही है? Y अक्ष को रूप में प्रतिशत के रूप में स्वरूपित करें पहलू अनुपात और चौड़ाई को रखने के द्वारा UIImage का आकार बदलें जावा के प्रकारों के विलोपन का क्या लाभ है? यह पता लगाने का व्यावहारिक तरीका है कि एसएमएस भेज दिया गया है या नहीं डिवीजन रिटर्न शून्य LINQ के साथ Sublists में विभाजित सूची

SQL में TRUNCATE और DELETE के बीच अंतर क्या है

मैंने इस सवाल का उत्तर गलती से लिखा था कि डीआरओपी और ट्रंकट के बीच के अंतर के बारे में एक सवाल के जवाब में, लेकिन मैंने सोचा कि यह साझा करने के लिए शर्म की बात है, इसलिए मैं अपने खुद के प्रश्न पर अपना जवाब पोस्ट करूँगा … यह है भी नैतिक? 🙂

संपादित करें: यदि आपका जवाब प्लेटफ़ॉर्म विशिष्ट है तो क्या आप यह संकेत दे सकते हैं कि

Solutions Collecting From Web of "SQL में TRUNCATE और DELETE के बीच अंतर क्या है"

यहाँ अंतर की एक सूची है मैंने ओरेकल-विशिष्ट विशेषताओं को उजागर किया है, और उम्मीद है कि समुदाय अन्य विक्रेताओं के विशिष्ट अंतर में भी जोड़ सकते हैं अधिकांश विक्रेताओं के लिए आम बातों के अंतर नीचे दिए गए अंतरों के साथ सीधे शीर्षकों के नीचे जा सकते हैं।


सामान्य अवलोकन

यदि आप किसी तालिका से सभी पंक्तियों को शीघ्रता से हटाना चाहते हैं, और आप वास्तव में यह सुनिश्चित करना चाहते हैं कि आप ऐसा करना चाहते हैं, और आपके पास तालिकाओं के विरुद्ध विदेशी कुंजी नहीं है, तो संभवतः एक TRUNCATE DELETE की तुलना में तेज़ हो रहा है ।

विभिन्न प्रणाली-विशिष्ट मुद्दों पर विचार किया जाना चाहिए, जैसा कि नीचे बताया गया है।


विवरण प्रकार

डिलीट डीएमएल है, ट्रुनेटेट डीडीएल है


प्रतिबद्ध और रोलबैक

विक्रेता द्वारा परिवर्तनीय

एस क्यू एल सर्वर

ट्रुन्केट को वापस रोल किया जा सकता है

PostgreSQL

ट्रुन्केट को वापस रोल किया जा सकता है

आकाशवाणी

चूंकि एक ट्रंकडेट डीडीएल है, इसमें दो कमान शामिल हैं, बयान के निष्पादन के बाद पहले और एक के बाद। ट्रुन्केट को इसलिए वापस नहीं लाया जा सकता है, और ट्रंकेट प्रक्रिया में एक विफलता ने वैसे भी एक प्रतिबद्धता जारी की होगी।

हालांकि, फ़्लैशबैक नीचे देखें।


अंतरिक्ष उद्धार

हटाना स्थान पुनर्प्राप्त नहीं करता है, ट्रिंकेट को स्थान ठीक कर देता है

आकाशवाणी

यदि आप रीयूज स्टोरेज क्लॉज का उपयोग करते हैं तो डेटा सेगमेंट को डी-ऑलोकेटेड नहीं किया जाता है, जो डेटा के साथ फिर से लोड किए जाने के लिए टेबल को अधिक कुशल बना सकता है। उच्च पानी का निशान रीसेट है


पंक्ति गुंजाइश

हटाएं केवल कुछ पंक्तियों को निकाल सकते हैं कटौती सभी पंक्तियों को निकालता है

आकाशवाणी

जब एक तालिका विभाजन हो जाती है, तो अलग-अलग विभाजन अलगाव में छोटा किया जा सकता है, इस प्रकार सभी तालिका के डेटा का आंशिक रूप से हटाने संभव है।


ऑब्जेक्ट प्रकार

क्लस्टर के अंदर तालिकाओं और तालिकाओं पर हटाया जा सकता है कटौती केवल तालिकाओं या संपूर्ण क्लस्टर पर लागू होता है (ओरेकल विशिष्ट हो सकता है)


डेटा वस्तु पहचान

आकाशवाणी

हटाए गए डेटा ऑब्जेक्ट आईडी को प्रभावित नहीं करता है, लेकिन छंटनी एक नया डेटा ऑब्जेक्ट आईडी निर्दिष्ट करता है जब तक कि इसके निर्माण के बाद से टेबल के खिलाफ कोई प्रविष्टि नहीं हुई है यहां तक ​​कि एक एकल डालें जो वापस लुढ़का हुआ है, एक नया डेटा ऑब्जेक्ट आईडी ट्रांस्केशन पर सौंपा जाएगा ।


फ़्लैश बैक (ओरेकल)

फ़्लैश बैक पूरे हटाए गए कार्यों पर काम करता है, लेकिन एक कटौती आपरेशन से पहले राज्यों को फ़्लैश बैक को रोकता है।

हालांकि, 11 जीआर 2 से फ्लैशबैक आर्चीव सुविधा यह एक्सप्रेस संस्करण को छोड़कर, अनुमति देता है

ओरेकल में फ्लैशबैक का उपयोग http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


विशेषाधिकार

परिवर्तनशील

आकाशवाणी

हटाएं किसी अन्य उपयोगकर्ता या भूमिका के लिए तालिका पर दी जा सकती है, लेकिन किसी भी ड्रॉप डिस्प्ले का उपयोग किए बिना छंटनी नहीं हो सकती।


फिर से करें / पूर्ववत

हटाएं एक छोटी मात्रा में दोबारा रिलीज़ और पूर्ववत की एक बड़ी मात्रा उत्पन्न करता है। कटौती प्रत्येक के एक नगण्य राशि उत्पन्न करता है


इंडेक्स

आकाशवाणी

ट्रांकेटेट ऑपरेशन अनुपयोगी अनुक्रमित को पुनः प्रयोग करने योग्य बनाता है। हटाएं नहीं


विदेशी कुंजी

जब कोई सक्षम विदेशी कुंजी तालिका को संदर्भित करता है, तो ट्रांकेट को लागू नहीं किया जा सकता। हटाने के साथ उपचार विदेशी कुंजियों के विन्यास पर निर्भर करता है।


टेबल लॉकिंग

आकाशवाणी

ट्रुन्केट को एक अनन्य टेबल लॉक की आवश्यकता है, हटाए जाने के लिए एक साझा टेबल लॉक की आवश्यकता है इसलिए टेबल लॉक को अक्षम करने का एक तरीका है जो किसी टेबल पर ट्रांकेटेट ऑपरेशन को रोकता है।


ट्रिगर

डीएमएल ट्रिगर से ट्रिगर होता है

आकाशवाणी

डीडीएल ट्रिगर उपलब्ध हैं


दूरस्थ निष्पादन

आकाशवाणी

एक डेटाबेस लिंक पर ट्रुन्केट को जारी नहीं किया जा सकता।


पहचान कॉलम

एस क्यू एल सर्वर

टंकण को ​​पहचान स्तंभ प्रकारों के क्रम को पुन: सेट किया जाता है, हटाएं नहीं।


परिणाम सेट

अधिकांश कार्यान्वयन में, एक DELETE कथन क्लाइंट को हटाई गई पंक्तियों को वापस कर सकती है।

जैसे ओरेकल पीएल / एसक्यूएल सबप्रोग्राम में आप यह कर सकते हैं:

 DELETE FROM employees_temp WHERE employee_id = 299 RETURNING first_name, last_name INTO emp_first_name, emp_last_name; 

ट्रेंचेट और डिलीट के बीच का अंतर नीचे सूचीबद्ध है:

 +----------------------------------------+----------------------------------------------+ | Truncate | Delete | +----------------------------------------+----------------------------------------------+ | We can't Rollback after performing | We can Rollback after delete. | | Truncate. | | | | | | Example: | Example: | | BEGIN TRAN | BEGIN TRAN | | TRUNCATE TABLE tranTest | DELETE FROM tranTest | | SELECT * FROM tranTest | SELECT * FROM tranTest | | ROLLBACK | ROLLBACK | | SELECT * FROM tranTest | SELECT * FROM tranTest | +----------------------------------------+----------------------------------------------+ | Truncate reset identity of table. | Delete does not reset identity of table. | +----------------------------------------+----------------------------------------------+ | It locks the entire table. | It locks the table row. | +----------------------------------------+----------------------------------------------+ | Its DDL(Data Definition Language) | Its DML(Data Manipulation Language) | | command. | command. | +----------------------------------------+----------------------------------------------+ | We can't use WHERE clause with it. | We can use WHERE to filter data to delete. | +----------------------------------------+----------------------------------------------+ | Trigger is not fired while truncate. | Trigger is fired. | +----------------------------------------+----------------------------------------------+ | Syntax : | Syntax : | | 1) TRUNCATE TABLE table_name | 1) DELETE FROM table_name | | | 2) DELETE FROM table_name WHERE | | | example_column_id IN (1,2,3) | +----------------------------------------+----------------------------------------------+ 

सभी अच्छे उत्तर, जिनमे मुझे जोड़ना होगा:

चूंकि TRUNCATE TABLE एक डीडीएल ( डेटा डिफिएंट लैंग्वेज ) है, एक डीएमएल ( डेटा मैनेप्यूलेशन लैंगेज ) कमांड नहीं है, Delete Triggers रन नहीं करते हैं।

ड्रॉप

डीआरओपी कमांड डेटाबेस से एक तालिका को निकालती है सभी तालिकाओं की पंक्तियां, अनुक्रमित और विशेषाधिकार भी हटा दिए जाएंगे। कोई डीएमएल ट्रिगर नहीं किया जाएगा। ऑपरेशन वापस नहीं लाया जा सकता।

TRUNCATE

TRUNCATE तालिका से सभी पंक्तियों को निकाल देता है ऑपरेशन को वापस नहीं लाया जा सकता है और कोई ट्रिगर नहीं छोड़ा जा सकता है। जैसे कि, TRUCATE तेज है और DELETE के रूप में उतना पूर्ववत स्थान का उपयोग नहीं करता है।

DELETE

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

से: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

एसक्यूएल सर्वर या माइएसक्यूएल के साथ, यदि कोई पीके ऑटो इंक्रीमेंट के साथ है, तो कटौती काउंटर को रीसेट कर देगा।

"तुकड़ना कुछ भी नहीं लॉग करता है" सही है। मैं आगे जाऊंगा:

ट्रांकेट को ट्रांजैक्शन के संदर्भ में निष्पादित नहीं किया गया है।

मिटाए जाने पर छंटनी का तेज लाभ स्पष्ट होना चाहिए। यह लाभ तुच्छ से लेकर आपकी स्थिति पर निर्भर करता है।

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

एसक्यूएल सर्वर में हटाना बनाम टर्नकाकेट का सारांश
पूर्ण अनुच्छेद के लिए इस लिंक का अनुसरण करें: http://dotnetmob.com/sql-server-article/delete-vs-truncate-in-sql-server/

यहां छवि विवरण दर्ज करें

डॉटनेट भीड़ आलेख से लिया गया: एसक्यूएल सर्वर में बनाम टर्नकाकेट हटाएं

हाँ, DELETE धीमी है, TRUNCATE तेज है क्यूं कर?

DELETE को रिकॉर्ड पढ़ना, बाधाओं की जांच करना, ब्लॉक को अपडेट करना, अनुक्रमित अपडेट करना और पुनः करना / पूर्ववत करना होगा। उसमें से सभी को समय लगता है

TRUNCATE तालिका (उच्च जल निशान) और poof के लिए बस डेटाबेस में एक सूचक को समायोजित करता है! डेटा चला गया है

यह ओरेकल विशिष्ट, एएफएआईके है।

यदि गलती से आप हटाए / ट्रुनेकेट का उपयोग करते हुए तालिका से सभी डेटा हटा दिए हैं आप लेनदेन को वापस ले सकते हैं अंतिम बैकअप और ट्रांजैक्शन लॉग को तब तक रीस्टोर करें जब हटाए जाने / ट्रंककेट होने वाला है।

नीचे दी गई संबंधित जानकारी एक ब्लॉग पोस्ट से है :

डेटाबेस पर काम करते समय, हम उन दोनों के बीच मतभेदों को जानने के बिना हटाए और ट्रंककेट का उपयोग कर रहे हैं। इस आलेख में हम एसक्यूएल में हटाने और ट्रंकेट के बीच अंतर पर चर्चा करेंगे।

हटाएँ:

  • हटाएं एक डीएमएल कमांड है
  • हटाएँ कथन पंक्ति ताला का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति को हटाए जाने के लिए लॉक किया जाता है।
  • हम जहां खंड में फ़िल्टर निर्दिष्ट कर सकते हैं
  • यदि डेटा मौजूद है, तो यह निर्दिष्ट डेटा हटाता है
  • गतिविधियों को एक ट्रिगर हटाएं क्योंकि ऑपरेशन व्यक्तिगत रूप से लॉग किया गया है।
  • Truncate की तुलना में धीमी है क्योंकि यह लॉग्स रखता है

काटें

  • ट्रन्केट एक डीडीएल कमांड है
  • तालिका को खंडित करना हमेशा तालिका और पृष्ठ को लॉक करता है, लेकिन हर पंक्ति नहीं। जैसा कि यह सभी डेटा निकाल देता है
  • उपयोग नहीं कर सकते
  • यह सभी डेटा हटाता है
  • ट्रिंकेट तालिका एक ट्रिगर को सक्रिय नहीं कर सकती क्योंकि ऑपरेशन व्यक्तिगत पंक्ति हटाने में लॉग इन नहीं करता है।
  • प्रदर्शन के अनुसार तेज, क्योंकि यह किसी भी लॉग को नहीं रखता है।

नोट: लेन-देन के साथ उपयोग किए जाने पर दोनों को हटाकर हटा दें। यदि लेनदेन किया गया है, तो इसका मतलब है कि हम ट्रंककेट कमांड को रोलबैक नहीं कर सकते हैं, लेकिन हम अभी भी लॉग फाइल से हटाए गए आदेश को रोलबैक कर सकते हैं, क्योंकि लॉग फ़ाइल में भविष्य में रोलबैक करने के लिए उसे लॉग फ़ाइल में रिकॉर्ड लिखने के लिए आवश्यक है।

यदि आपके पास तालिका को संदर्भित करने के लिए विदेशी कुंजी बाधा है जिसे आप छोटा करने का प्रयास कर रहे हैं, तो यह तब भी काम नहीं करेगा जब संदर्भ तालिका में इसमें कोई डेटा नहीं है। ऐसा इसलिए है क्योंकि डीएमएल के बजाय डीडीएल के साथ विदेशी कुंजी की जाँच की जाती है। इसे अस्थायी रूप से विदेशी कुंजी बाधाओं को तालिका में अक्षम कर सकते हैं।

तालिका हटाना एक लॉग की गई कार्रवाई है इसलिए प्रत्येक पंक्ति का विलेख लेनदेन लॉग में लॉग होता है, जो इसे धीमा बनाता है तालिका काटकर तालिका में सभी पंक्तियों को भी हटा दिया जाता है, लेकिन यह प्रत्येक पंक्ति के विलोपन को लॉग नहीं करेगा बल्कि इसके बजाय तालिका के डेटा पृष्ठों का deallocation करता है, जो इसे तेज़ बनाता है

~ यदि गलती से आपने हटाए / ट्रुनेकेट का प्रयोग करते हुए तालिका से सभी डेटा हटा दिए हैं आप लेनदेन को वापस ले सकते हैं अंतिम बैकअप और ट्रांजैक्शन लॉग को तब तक रीस्टोर करें जब हटाए जाने / ट्रंककेट होने वाला है।

TRUNCATE डीडीएल का बयान है जबकि DELETE एक डीएमएल स्टेटमेंट है। नीचे दो के बीच मतभेद हैं:

  1. TRUNCATE एक डीडीएल ( डेटा परिभाषा भाषा ) कथन है इसलिए इसे परिवर्तनों को स्थायी बनाने के लिए कोई प्रतिबद्धता की आवश्यकता नहीं है। और यही कारण है कि ट्रॉनेट के द्वारा हटाए गए पंक्तियों को रोलबैक नहीं किया जा सका। दूसरी ओर DELETE एक डीएमएल ( डेटा हेरफेर भाषा ) बयान है इसलिए इसके लिए स्पष्ट रूप से इसके प्रभाव को स्थायी बनाने के लिए आवश्यक है

  2. TRUNCATE हमेशा तालिका से सभी पंक्तियों को निकालता है, मेज खाली छोड़ता है और टेबल संरचना को बरकरार DELETE है, जबकि DELETE सशर्त रूप से निकाल सकता है, यदि कहां खंड का उपयोग किया जाता है

  3. TRUNCATE TABLE स्टेटमेंट द्वारा हटाए गए पंक्तियों को पुनर्स्थापित नहीं किया जा सकता है और आप TRUNCATE स्टेटमेंट में कहां खंड निर्दिष्ट नहीं कर सकते।

  4. TRUNCATE बयान TRUNCATE ट्रिगर्स को TRUNCATE नहीं करता है क्योंकि DELETE स्टेटमेंट पर DELETE ट्रिगर का विरोध किया जाता है

यहां विषय के लिए प्रासंगिक बहुत अच्छा लिंक है।

TRUNCATE

  • यह तेज़ है और DELETE से कम सिस्टम और लेनदेन लॉग संसाधनों का उपयोग करता है।
  • तालिका के डेटा को संग्रहीत करने के लिए उपयोग किए गए डेटा पृष्ठों को हटाना द्वारा डेटा को निकालता है, और लेनदेन लॉग में केवल पृष्ठ के डेलोकेशन रिकॉर्ड किए जाते हैं
  • एक मेज से सभी पंक्तियों को निकालता है, लेकिन टेबल संरचना, इसके स्तंभ, बाधाओं, अनुक्रमित और इतने पर, बनी हुई है। नई पंक्तियों के लिए पहचान द्वारा प्रयुक्त काउंटर स्तंभ के लिए बीज को रीसेट करता है।
  • आप किसी FOREIGN KEY बाधा से संदर्भित TRUNCATE TABLE पर TRUNCATE TABLE उपयोग नहीं कर सकते। क्योंकि TRUNCATE TABLE लॉग नहीं है, यह एक ट्रिगर सक्रिय नहीं कर सकता
  • वापस रोल नहीं किया जा सकता।
  • यह डीडीएल कमांड है
  • तालिका की पहचान को रीसेट करता है

DELETE

  • एक बार में पंक्तियों को हटा देता है और प्रत्येक हटाए गए पंक्ति के लिए लेनदेन लॉग में एक प्रविष्टि दर्ज करता है
  • यदि आप पहचान काउंटर को बनाए रखना चाहते हैं, तो इसके बजाय DELETE उपयोग करें। यदि आप तालिका परिभाषा और इसके डेटा को हटाना चाहते हैं, तो DROP TABLE स्टेटमेंट का उपयोग करें।
  • WHERE खंड के साथ या बिना इस्तेमाल किया जा सकता है
  • ट्रिगर सक्रिय करता है
  • वापस रोल किया जा सकता है
  • यह डीएमएल कमांड है
  • तालिका की पहचान को रीसेट नहीं करता है

नोट: DELETE घिरे हुए जब मौजूदा सत्र बंद नहीं किया गया है, तो दोनों को DELETE और TRUNCATE वापस रोल किया जा सकता है। यदि TRUNCATE क्वेरी एडीटर में TRUNCATE से घिरा हुआ है और यदि सत्र बंद है, तो उसे वापस नहीं लाया जा सकता है, लेकिन DELETE को वापस रोल किया जा सकता है।

एसक्यूएल सर्वर 2005 में मुझे विश्वास है कि आप एक ट्रंककेट को वापस कर सकते हैं

DELETE

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

TRUNCATE

TRUNCATE तालिका से सभी पंक्तियों को निकाल देता है ऑपरेशन को वापस नहीं लाया जा सकता है और कोई ट्रिगर नहीं छोड़ा जा सकता है। जैसे कि, TRUCATE तेज है और DELETE के रूप में उतना पूर्ववत स्थान का उपयोग नहीं करता है।

ड्रॉप

डीआरओपी कमांड डेटाबेस से एक तालिका को निकालती है सभी तालिकाओं की पंक्तियां, अनुक्रमित और विशेषाधिकार भी हटा दिए जाएंगे। कोई डीएमएल ट्रिगर नहीं किया जाएगा। ऑपरेशन वापस नहीं लाया जा सकता।


ड्रॉप और ट्रंकडेट डीडीएल कमांड हैं, जबकि डीईएलईटी एक डीएमएल कमांड है। इसलिए DELETE संचालन वापस (पूर्ववत) रोल किया जा सकता है, जबकि DROP और TRUNCATE परिचालनों को वापस नहीं लाया जा सकता है।

से: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

मूल उत्तर में एक छोटा सुधार – हटाए जाने की महत्वपूर्ण मात्रा में भी फिर से उत्पन्न करता है (जैसा कि पूर्ववत स्वतः ही फिर से संरक्षित है)। इसे ऑटोट्रेस आउटपुट से देखा जा सकता है:

 SQL> delete from t1; 10918 rows deleted. Elapsed: 00:00:00.58 Execution Plan ---------------------------------------------------------- 0 DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1) 1 0 DELETE OF 'T1' 2 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1) Statistics ---------------------------------------------------------- 30 recursive calls 12118 db block gets 213 consistent gets 142 physical reads 3975328 redo size 441 bytes sent via SQL*Net to client 537 bytes received via SQL*Net from client 4 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 10918 rows processed 

लेनदेन में लिपटे जाने पर TRUNCATE को वापस रोल किया जा सकता है।

कृपया नीचे दो संदर्भ देखें और स्वयं का परीक्षण करें: –

http://blog.sqlauthority.com/2007/12/26/sql-server-truncate-cant-be-rolled-back-using-log-files-after-transaction-session-is-closed/

http://sqlblog.com/blogs/kalen_delaney/archive/2010/10/12/tsql-tuesday-11-rolling-back-truncate-table.aspx

ट्रंक बनाम डीईएलईटी एसक्यूएल साक्षात्कार के दौरान कुख्यात सवालों में से एक है। सिर्फ यह सुनिश्चित कर लें कि आप इसे साक्षात्कारकर्ता को ठीक से समझाते हैं या आपको नौकरी मिल सकती है समस्या यह है कि बहुत से लोगों को पता नहीं है कि वे इस जवाब को गलत मानकर देखेंगे यदि आप उन्हें बताते हैं कि हां तुंट को वापस लाया जा सकता है

हटाएं विवरण: यदि कोई शर्त निर्दिष्ट नहीं की गई है, तो इस आदेश में तालिका में मौजूद पंक्तियों के आधार पर तालिका में से केवल पंक्तियों को हटाया जाता है जहां तालिका से सभी पंक्तियों को हटा दिया गया है या हटाया गया है। लेकिन यह तालिका युक्त स्थान को मुक्त नहीं करता है।

एसक्यूएल डिलीटे स्टेटमेंट का सिंटैक्स है:

तालिका के नाम से हटाएं [जहां हालत];

ट्रंककेट स्टेटमेंट: इस कमांड का उपयोग तालिका से सभी पंक्तियों को हटाने के लिए किया जाता है और तालिका युक्त स्थान को मुक्त करता है।

DELETE

 DELETE is a DML command DELETE you can rollback Delete = Only Delete- so it can be rolled back In DELETE you can write conditions using WHERE clause Syntax – Delete from [Table] where [Condition] 

TRUNCATE

 TRUNCATE is a DDL command You can't rollback in TRUNCATE, TRUNCATE removes the record permanently Truncate = Delete+Commit -so we can't roll back You can't use conditions(WHERE clause) in TRUNCATE Syntax – Truncate table [Table] 

अधिक जानकारी के लिए यात्रा करें

http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/

दो आपरेशनों में से एक अंतर यह है कि यदि तालिका में एक पहचान कॉलम है, तो उस कॉलम के लिए काउंटर TRUNCATE के तहत रीसेट 1 (या कॉलम के लिए निर्धारित बीज मूल्य के लिए) है। DELETE पर इसका असर नहीं होता है

SQL सर्वर में DELETE और TRUNCATE के बीच अंतर पर मेरा विस्तृत जवाब यहां है I

डेटा निकालें : पहली बात पहले, दोनों को तालिका से पंक्तियों को निकालने के लिए इस्तेमाल किया जा सकता है।
लेकिन एक डेली का उपयोग केवल एक तालिका से ही नहीं बल्कि किसी दृश्य से या एक ओपनओवर या ओपेनक्चर के प्रदाता क्षमताओं के अधीन होने वाली पंक्तियों को निकालने के लिए किया जा सकता है।

खंड से : DELETE के साथ आप किसी अन्य तालिका से दूसरे तालिका से पंक्तियों के आधार पर पंक्तियों के आधार पर एक तालिका / दृश्य / पंक्तियों_फंक्शन_लिफ़म से पंक्तियां भी हटा सकते हैं। उस एफआरएम खंड में आप सामान्य जॉइन शर्तों को भी लिख सकते हैं। असल में आप एक SELECT कथन से एक डिलीटे स्टेटमेंट बना सकते हैं जिसमें SELE के साथ DELETE का चयन करके और कॉलम नामों को निकालने से कोई समस्त कार्य नहीं हो सकते।
ट्रंक के साथ आप ऐसा नहीं कर सकते

जहां : एक ट्रंककेट में WHERE स्थितियां नहीं हो सकती हैं, लेकिन एक DELETE कर सकते हैं इसका अर्थ है कि आप किसी विशिष्ट पंक्ति या पंक्तियों के विशिष्ट समूह को नहीं हटा सकते हैं। ट्रंककेट टेबल DELETE कथन के समान है जिसमें कोई भी WHERE खंड नहीं है।

प्रदर्शन : ट्रंककेट टेबल तेज है और कम सिस्टम और लेनदेन लॉग संसाधनों का उपयोग करता है। और एक कारण यह है कि किसी भी बयान के द्वारा प्रयोग किए जाने वाले ताले हैं। DELETE कथन पंक्ति ताला का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति हटाए जाने के लिए लॉक होती है। टंक टॉबल हमेशा तालिका और पृष्ठ को लॉक करता है लेकिन हर पंक्ति नहीं।

लेनदेन लॉग : DELETE वक्तव्य एक बार में पंक्तियों को हटा देता है और प्रत्येक पंक्ति के लिए लेनदेन लॉग में व्यक्तिगत प्रविष्टियां बनाता है।
ट्रंककेट टेबल डेटा डेटा को स्टोर करने के लिए उपयोग किए गए डेटा पृष्ठों को हटाना और लेनदेन लॉग में केवल पृष्ठ deallocations रिकॉर्ड करके डेटा को निकालता है।

पन्ने : डीईएलईईटी कथन के निष्पादन के बाद, टेबल में अब भी खाली पृष्ठ हो सकते हैं। TRUNCATE डेटा डेटा को स्टोर करने के लिए उपयोग किए गए डेटा पृष्ठों को हटाना द्वारा डेटा को निकाल देता है

ट्रिगर : TRUNCATE मेज पर ट्रिगर हटाएं को सक्रिय नहीं करता है। तो TRUNCATE का उपयोग करते समय आपको बहुत सावधान रहना चाहिए यदि कोई भी स्वत: सफाई या पंक्तियों को हटाए जाने पर लॉग की गई कार्रवाई करने के लिए किसी भी ट्रिगर को तालिका में परिभाषित किया जाता है, तो TRUNCATE का उपयोग कभी नहीं करना चाहिए।

पहचान कॉलम : TRUNCATE के साथ यदि टेबल में कोई पहचान कॉलम होता है, तो उस कॉलम के लिए कॉलम को स्तंभ के लिए निर्धारित बीज मान पर रीसेट कर दिया जाता है। यदि कोई बीज परिभाषित नहीं किया गया था, तो डिफ़ॉल्ट मान 1 का उपयोग किया जाता है। DELETE पहचान काउंटर को रीसेट नहीं करता है। इसलिए यदि आप पहचान काउंटर को बनाए रखना चाहते हैं, तो इसके बजाय DELETE का उपयोग करें।

प्रतिकृतिकरण : लेन-देन को प्रतिकृत प्रतिकृति या मर्ज में प्रयुक्त तालिका के विरुद्ध उपयोग किया जा सकता है।
TRUNCATE को लेन-देन प्रतिकृति या मर्ज प्रतिकृति में शामिल तालिकाओं के विरुद्ध उपयोग नहीं किया जा सकता है।

रोलबैक : डिलीटे स्टेटमेंट वापस लाया जा सकता है।
TRUNCATE को भी वापस रोल किया जा सकता है, यह एक ट्रांससाक्शन ब्लॉक में संलग्न है और सत्र बंद नहीं है। सत्र बंद होने के बाद आप रोलबैक TRUNCATE में सक्षम नहीं होंगे।

प्रतिबंध : DELETE कथन विफल हो सकता है अगर यह एक ट्रिगर का उल्लंघन करता है या किसी अन्य तालिका में डेटा द्वारा संदर्भित एक पंक्ति को निकालने की कोशिश करता है जो कि विदेशी कुंजी बाधा है। अगर DELETE कई पंक्तियों को निकाल देता है, और हटाई गई पंक्तियों में से किसी एक को एक ट्रिगर या बाधा का उल्लंघन होता है, तो वक्तव्य रद्द कर दिया जाता है, एक त्रुटि लौटा दी जाती है, और कोई भी पंक्तियां निकाली नहीं जाती हैं।
और अगर DELETE को दृश्य के हिसाब से प्रयोग किया जाता है, तो दृश्य एक अपडेट करने योग्य दृश्य होना चाहिए। इंडेक्स्ड व्यू में उपयोग की गई तालिका के विरुद्ध TRUNCATE का उपयोग नहीं किया जा सकता।
किसी विदेशी कुंजी बाधा से संदर्भित टेबल के विरुद्ध TRUNCATE का उपयोग नहीं किया जा सकता है, जब तक कि ऐसी कोई भी तालिका जिसके पास कोई विदेशी कुंजी न हो जो स्वयं संदर्भ देता हो

संक्षेप में, किसी भी प्रकार के खंडन में लॉग नहीं होता है (ऐसा बहुत तेज है, लेकिन इसे पूर्ववत नहीं किया जा सकता है), जबकि हटाए गए लॉग (और एक बड़ा लेन-देन का हिस्सा हो सकता है, रोलबैक आदि होगा)। यदि आपके पास डेटा है जिसे आप किसी तालिका में नहीं चाहते हैं तो यह आमतौर पर बेहतर होता है क्योंकि आप लेनदेन लॉग को भरने के जोखिम को नहीं चलाते हैं

सबसे बड़ा अंतर यह है कि हटाए जाने के दौरान ट्रंकेट गैर लॉगिंग ऑपरेशन है।

बस इसका मतलब है कि डेटाबेस दुर्घटना के मामले में, आप ट्रंकेट द्वारा संचालित डेटा पुनर्प्राप्त नहीं कर सकते हैं, लेकिन हटाए जाने के साथ आप कर सकते हैं।

अधिक विवरण यहाँ

एक बड़ा कारण यह आसान है, जब आपको बहु-मिलियन पंक्ति तालिका में डेटा को रीफ़्रेश करना पड़ता है, लेकिन इसे फिर से बनाना नहीं चाहते हैं "हटाएँ *" हमेशा के लिए ले जाएगा, जबकि ट्रंकेट के perfomance प्रभाव नगण्य होगा।

डीडीएल को डीब्लिन पर नहीं कर सकते

मैटिएयू के पद पर मैं टिप्पणी करूंगा, लेकिन मेरे पास अभी तक प्रतिनिधि नहीं है …

MySQL में, ऑटो इंक्रीमेंट काउंटर ट्रंकेट के साथ रीसेट हो जाता है, लेकिन हटाए नहीं।

यह नहीं है कि truncate SQL सर्वर में कुछ भी लॉग नहीं करता है तुंट किसी भी जानकारी को लॉग नहीं करता है, लेकिन यह उस तालिका के लिए डेटा पृष्ठ के deallocation को लॉग ऑन करता है जिस पर आपने TRUNCATE निकाल दिया था।

और कटौती का रिकॉर्ड रोलबैक हो सकता है अगर हम शुरुआत में लेन-देन को परिभाषित करते हैं और रोलबैक के बाद हम कटौती के रिकॉर्ड को पुनर्प्राप्त कर सकते हैं। लेकिन कटौती किए गए ट्रांजैक्शन के बाद लेनदेन लॉग बैकअप से कटौती किए गए रिकॉर्ड को पुनर्प्राप्त नहीं किया जा सकता।

ट्रुन्केट को यहां रोलबैक किया जा सकता है

 begin Tran delete from Employee select * from Employee Rollback select * from Employee 

SQL में कटौती और हटाएं दो कमांड हैं जो तालिका से डेटा को हटाने या हटाने के लिए उपयोग किया जाता है। हालांकि काफी बुनियादी प्रकृति दोनों एसक्यूएल कमानों में बहुत परेशानी पैदा हो सकती है जब तक कि आप इसे इस्तेमाल करने से पहले विवरण से परिचित नहीं होते हैं। कमांड की एक गलत पसंद या तो बहुत धीमी प्रक्रिया हो सकती है या लॉग सेगमेंट भी उड़ा सकती है, अगर बहुत अधिक डेटा को निकाला जाना चाहिए और लॉग सेगमेंट पर्याप्त नहीं है यही कारण है कि यह जानना महत्वपूर्ण है कि एसक्यूएल में कम करना और हटाना आदेश का उपयोग कब करना है, लेकिन इन का उपयोग करने से पहले आपको ट्रंट एंड डिलीट के बीच के अंतर के बारे में पता होना चाहिए, और उन पर आधारित, हम यह पता लगाने में सक्षम होना चाहिए कि डीईएलईटी हटाने के लिए बेहतर विकल्प है। डेटा या TRUNCATE को तालिकाओं को शुद्ध करने के लिए इस्तेमाल किया जाना चाहिए

जांच को यहां क्लिक करें

एक टंकलेट टेबल स्टेटमेंट जारी करके, आप किसी भी लॉगिंग या ट्रांजैक्शन प्रोसेसिंग के बिना तालिका में हर रिकॉर्ड को हटाने के लिए SQL सर्वर को निर्देश दे रहे हैं।

DELETE

जब DELETE कथन को WHERE खंड के बिना निष्पादित किया जाता है, तो यह सभी पंक्तियों को हटा देगा। हालांकि, जब कोई नया रिकॉर्ड सम्मिलित किया जाता है तो पहचान मूल्य 11 (अधिकतम पहचान) से 12 तक बढ़ जाता है। यह रीसेट नहीं करता है, लेकिन बढ़ती रहती है। TRUNCATE

जब TRUNCATE कथन निष्पादित किया जाता है तो यह सभी पंक्तियों को निकाल देगा। हालांकि, जब एक नया रिकॉर्ड डाला जाता है, तो पहचान मूल्य 11 से बढ़ता है (जो मूल मान है)। TRUNCATE पहचान मूल्य को तालिका के मूल बीज मूल्य पर रीसेट करता है।

ड्रॉप

ट्रांस्जाक्शन के साथ उपयोग किए जाने पर दोबारा हटाएं और ट्रंककेट को वापस लाया जा सकता है।

यदि लेन-देन किया गया है, तो कमेटी का मतलब है, तो हम TRUNCATE कमांड को वापस नहीं ला सकते हैं, लेकिन हम अभी भी LOG फ़ाइलों से DELETE कमांड को रोलबैक कर सकते हैं, क्योंकि DELETE ने लॉग फाइल में उन्हें रिकॉर्ड किया है, क्योंकि भविष्य में LOG फ़ाइलों से रोलबैक करने की आवश्यकता है।