SQL में TRUNCATE
और क्या अंतर है DELETE
?
यदि आपका उत्तर प्लेटफ़ॉर्म विशिष्ट है, तो कृपया इसका संकेत दें।
SQL में TRUNCATE
और क्या अंतर है DELETE
?
यदि आपका उत्तर प्लेटफ़ॉर्म विशिष्ट है, तो कृपया इसका संकेत दें।
जवाबों:
यहाँ मतभेदों की एक सूची है। मैंने Oracle-विशिष्ट विशेषताओं पर प्रकाश डाला है, और उम्मीद है कि समुदाय अन्य विक्रेताओं के विशिष्ट अंतर में भी जोड़ सकता है। अधिकांश विक्रेताओं के लिए मतभेद जो सीधे शीर्षकों के नीचे जा सकते हैं, नीचे दिए गए मतभेदों के साथ हो सकते हैं।
यदि आप किसी तालिका से सभी पंक्तियों को जल्दी से हटाना चाहते हैं, और आप वास्तव में यह सुनिश्चित करना चाहते हैं कि आप इसे करना चाहते हैं, और आपके पास तालिकाओं के खिलाफ विदेशी कुंजी नहीं है, तो शायद एक ट्रेंकेट एक DELETE की तुलना में तेज़ होने वाला है ।
विभिन्न प्रणाली-विशिष्ट मुद्दों पर विचार किया जाना चाहिए, जैसा कि नीचे विस्तृत है।
हटाएं DML है, Truncate DDL है ( DDL और DML क्या है? )
विक्रेता द्वारा परिवर्तनीय
एस क्यू एल सर्वर
Truncate को वापस रोल किया जा सकता है।
PostgreSQL
Truncate को वापस रोल किया जा सकता है।
आकाशवाणी
क्योंकि एक TRUNCATE DDL है, इसमें दो कमिटमेंट शामिल हैं, एक पहले और स्टेटमेंट एक्जीक्यूशन के बाद। Truncate इसलिए वापस नहीं लुढ़का जा सकता है, और truncate प्रक्रिया में विफलता ने वैसे भी एक प्रतिबद्धता जारी की है।
हालाँकि, नीचे फ्लैशबैक देखें।
हटाएं स्थान को पुनर्प्राप्त नहीं करता है, Truncate स्थान को पुनर्प्राप्त करता है
आकाशवाणी
अगर आप REUSE STORAGE क्लॉज का उपयोग करते हैं तो डेटा खंडों को आबंटित नहीं किया जाता है, जो तालिका के डेटा के साथ पुनः लोड किया जाना है, तो यह मामूली रूप से अधिक कुशल हो सकता है। उच्च जल चिह्न रीसेट है।
हटाएँ का उपयोग सभी पंक्तियों या पंक्तियों के सबसेट को हटाने के लिए किया जा सकता है। Truncate सभी पंक्तियों को हटा देता है।
आकाशवाणी
जब एक तालिका को विभाजित किया जाता है, तो अलग-अलग विभाजन को अलग-थलग किया जा सकता है, इस प्रकार तालिका के सभी डेटा को आंशिक रूप से हटाया जा सकता है।
हटाएं एक क्लस्टर के अंदर तालिकाओं और तालिकाओं पर लागू किया जा सकता है। Truncate केवल तालिकाओं या संपूर्ण क्लस्टर पर लागू होता है। (Oracle विशिष्ट हो सकता है)
आकाशवाणी
डिलीट करने से डेटा ऑब्जेक्ट आईडी पर कोई असर नहीं पड़ता है, लेकिन जब तक उसके निर्माण के बाद से टेबल के खिलाफ कोई इंसर्ट नहीं होता है, तब तक ट्रंकट एक नया डेटा ऑब्जेक्ट आईडी असाइन करता है। यहां तक कि एक भी इंसर्ट जो रोल बैक किया गया है, वह ट्रेंक्यूशन पर नई डेटा ऑब्जेक्ट आईडी को असाइन करेगा। ।
फ्लैशबैक डिलीट करने के लिए काम करता है, लेकिन ऑपरेशन से पहले राज्यों को फ्लैशबैक रोकता है।
हालांकि, 11gR2 से FLASHBACK ARCHIVE फीचर इसकी अनुमति देता है, एक्सप्रेस एडिशन को छोड़कर
Oracle में FLASHBACK का उपयोग http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638
परिवर्तनशील
आकाशवाणी
हटाएं किसी अन्य उपयोगकर्ता या भूमिका के लिए एक तालिका पर दी जा सकती हैं, लेकिन किसी भी TABLE अनुदान DROP का उपयोग किए बिना छोटा नहीं हो सकता है।
हटाएं एक छोटी राशि फिर से बनाता है और बड़ी मात्रा में पूर्ववत करता है। Truncate प्रत्येक की एक नगण्य राशि उत्पन्न करता है।
आकाशवाणी
एक छोटा ऑपरेशन अनुपयोगी सूचकांक को फिर से प्रयोग करने योग्य बनाता है। हटाएं नहीं।
जब एक सक्षम विदेशी कुंजी तालिका को संदर्भित करती है तो एक ट्रंकट लागू नहीं किया जा सकता है। हटाने के साथ उपचार विदेशी कुंजियों के कॉन्फ़िगरेशन पर निर्भर करता है।
आकाशवाणी
Truncate को एक विशेष टेबल लॉक की आवश्यकता होती है, डिलीट के लिए एक साझा टेबल लॉक की आवश्यकता होती है। इसलिए टेबल लॉक को अक्षम करना एक टेबल पर ट्रंकट संचालन को रोकने का एक तरीका है।
डीएमएल ट्रिगर एक ट्रंकैट पर फायर नहीं करते हैं।
आकाशवाणी
डीडीएल ट्रिगर उपलब्ध हैं।
आकाशवाणी
Truncate एक डेटाबेस लिंक पर जारी नहीं किया जा सकता है।
एस क्यू एल सर्वर
Truncate IDENTITY स्तंभ प्रकारों के लिए अनुक्रम को रीसेट करता है, हटाता नहीं है।
अधिकांश कार्यान्वयनों में, एक DELETE
बयान ग्राहक को उन पंक्तियों पर वापस ला सकता है जिन्हें हटा दिया गया था।
एक Oracle PL / SQL उपप्रोग्राम में जैसे आप कर सकते हैं:
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) |
+----------------------------------------+----------------------------------------------+
ड्रॉप
DROP कमांड डेटाबेस से एक टेबल हटाता है। सभी तालिकाओं की पंक्तियों, अनुक्रमित और विशेषाधिकारों को भी हटा दिया जाएगा। कोई डीएमएल ट्रिगर नहीं किया जाएगा। ऑपरेशन वापस नहीं किया जा सकता है।
TRUNCATE
TRUNCATE एक तालिका से सभी पंक्तियों को निकालता है। ऑपरेशन वापस नहीं किया जा सकता है और कोई ट्रिगर नहीं निकाला जाएगा। जैसे, TRUNCATE तेज़ है और DELETE के रूप में अधिक पूर्ववत स्थान का उपयोग नहीं करता है। Truncating जब टेबल स्तर लॉक जोड़ा जाएगा।
हटाएँ
DELETE कमांड का उपयोग किसी तालिका से पंक्तियों को हटाने के लिए किया जाता है। कुछ पंक्तियों को हटाने के लिए जहां क्लॉज का उपयोग किया जा सकता है। यदि कोई शर्त नहीं है, तो सभी पंक्तियों को हटा दिया जाएगा। DELETE ऑपरेशन करने के बाद आपको परिवर्तन को स्थायी बनाने के लिए या इसे पूर्ववत करने के लिए लेन-देन को कम या सीमित करना होगा। ध्यान दें कि इस ऑपरेशन के कारण आग पर मेज पर सभी DELETE ट्रिगर हो जाएंगे। हटाने पर रो लेवल लॉक जोड़ा जाएगा।
प्रेषक: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
सभी अच्छे उत्तर, जिनमें मुझे जोड़ना होगा:
चूंकि TRUNCATE TABLE
एक डीडीएल ( डेटा डिफिकेशन लैंग्वेज ) है, डीएमएल ( डेटा मैनिपुलेशन लैंग्वेज ) कमांड Delete Triggers
नहीं है।
पूरा लेख के लिए SQL सर्वर में डिलीट बनाम ट्रंकट का सारांश इस लिंक का अनुसरण करें: http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/
डॉटनेट भीड़ लेख से लिया गया: SQL सर्वर में बनाम ट्रंकट हटाएं
SQL सर्वर या MySQL के साथ, यदि ऑटो वेतन वृद्धि के साथ PK है, तो truncate काउंटर को रीसेट करेगा।
DBCC CHECKIDENT (table_name, RESEED, 1)
"Truncate कुछ भी लॉग नहीं करता है" सही है। मैं और आगे जाऊँगा:
ट्रंकैट को लेनदेन के संदर्भ में निष्पादित नहीं किया जाता है।
डिलीट ओवर ट्रंकट का गति लाभ स्पष्ट होना चाहिए। यह लाभ आपकी स्थिति के आधार पर, तुच्छ से लेकर विशाल तक होता है।
हालाँकि, मैंने देखा है कि अनजाने में संदर्भात्मक अखंडता को तोड़ दिया है, और अन्य बाधाओं का उल्लंघन किया है। लेन-देन के बाहर डेटा को संशोधित करके हासिल करने वाली शक्ति को उस जिम्मेदारी के खिलाफ संतुलित होना चाहिए जो आपको विरासत में मिलती है जब आप नेट के बिना कसकर चलते हैं।
TRUNCATE
DDL स्टेटमेंट है जबकि DELETE
DML स्टेटमेंट है। नीचे दोनों के बीच अंतर हैं:
जैसा TRUNCATE
कि एक डीडीएल ( डेटा डेफिनिशन लैंग्वेज ) स्टेटमेंट है, इसमें बदलावों को स्थायी बनाने के लिए कमिटमेंट की जरूरत नहीं है। और यही कारण है कि ट्रंकैट द्वारा हटाई गई पंक्तियों को रोलबैक नहीं किया जा सका। दूसरी ओर DELETE
एक डीएमएल ( डेटा हेरफेर भाषा ) स्टेटमेंट है, इसलिए इसके प्रभाव को स्थायी बनाने के लिए स्पष्ट प्रतिबद्धता की आवश्यकता है।
TRUNCATE
हमेशा एक तालिका से सभी पंक्तियों को हटा देता है, तालिका को खाली छोड़ देता है और तालिका संरचना को बरकरार रखता है जबकि DELETE
जहां क्लॉज का उपयोग किया जाता है तो सशर्त रूप से हटा सकता है।
TRUNCATE TABLE
कथन द्वारा हटाई गई पंक्तियों को पुनर्स्थापित नहीं किया जा सकता है और आप TRUNCATE
बयान में दिए गए खंड को निर्दिष्ट नहीं कर सकते ।
TRUNCATE
बयान चलाता आग नहीं करता है के रूप में पर नष्ट ट्रिगर पर की विरोध किया DELETE
बयान
यहां विषय से संबंधित बहुत अच्छी लिंक दी गई है।
हां, DELETE धीमा है, TRUNCATE तेज है। क्यों?
DELETE को रिकॉर्ड पढ़ना चाहिए, बाधाओं की जांच करनी चाहिए, ब्लॉक को अपडेट करना चाहिए, इंडेक्स को अपडेट करना होगा, और रीडो / पूर्ववत उत्पन्न करना होगा। उस सब में समय लगता है।
TRUNCATE बस तालिका (हाई वॉटर मार्क) और पूफ के लिए डेटाबेस में एक पॉइंटर को समायोजित करता है! डेटा गया है।
यह Oracle विशिष्ट है, AFAIK।
TRUNCATE
TRUNCATE SQL क्वेरी एक पंक्ति से सभी पंक्तियों को हटा देती है, बिना व्यक्तिगत पंक्ति हटाए लॉगिंग के।
हटाएँ
DELETE कतार निष्पादित करने के लिए, लक्ष्य तालिका पर हटाए गए अनुमतियों की आवश्यकता होती है। यदि आपको किसी DELETE में WHERE क्लॉज़ का उपयोग करने की आवश्यकता है, तो चयन अनुमतियाँ भी आवश्यक हैं।
यदि गलती से आपने Delete / Truncate का उपयोग करके तालिका से सभी डेटा हटा दिया है। आप प्रतिबद्ध लेनदेन को रोलबैक कर सकते हैं। अंतिम बैकअप को पुनर्स्थापित करें और ट्रांजेक्शन लॉग को उस समय तक चलाएं जब डिलीट / ट्रंकट होने वाला हो।
नीचे संबंधित जानकारी एक ब्लॉग पोस्ट से है :
डेटाबेस पर काम करते समय, हम उनके बीच के अंतर को जाने बिना डिलीट और ट्रंकट का उपयोग कर रहे हैं। इस लेख में हम Sql में Delete और Truncate के बीच अंतर पर चर्चा करेंगे।
हटाएँ:
- डिलीट एक डीएमएल कमांड है।
- डिलीट स्टेटमेंट को एक पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति को हटाने के लिए लॉक किया जाता है।
- हम फिल्टर को निर्दिष्ट कर सकते हैं कि कहां क्लॉज है।
- यह निर्दिष्ट डेटा हटाता है यदि स्थिति कहाँ है।
- गतिविधियों को ट्रिगर हटाएं क्योंकि ऑपरेशन व्यक्तिगत रूप से लॉग इन किया गया है।
- Truncate से धीमा क्योंकि यह लॉग रखता है
काट-छांट
- Truncate एक DDL कमांड है।
- ट्रंकट टेबल हमेशा टेबल और पेज को लॉक करती है लेकिन प्रत्येक पंक्ति को नहीं। क्योंकि यह सभी डेटा को हटा देती है।
- कहां शर्त का उपयोग नहीं कर सकते।
- यह सभी डेटा को निकालता है।
- ट्रंकट तालिका ट्रिगर को सक्रिय नहीं कर सकती है क्योंकि ऑपरेशन अलग-अलग पंक्ति विलोपन को लॉग नहीं करता है।
- प्रदर्शन में तेज़, क्योंकि यह कोई लॉग नहीं रखता है।
नोट: हटाएं और काटें दोनों को लेन-देन के साथ उपयोग किए जाने पर वापस रोल किया जा सकता है। यदि लेन-देन किया जाता है, तो इसका मतलब है कि हम Truncate कमांड को रोलबैक नहीं कर सकते हैं, लेकिन हम अभी भी लॉग फाइल से कमांड को रोलबैक कर सकते हैं, क्योंकि डिलीट राइट रिकॉर्ड को लॉग फाइल से भविष्य में रोलबैक करने के लिए आवश्यक होने पर उन्हें रिकॉर्ड में हटा दें।
यदि आपके पास एक विदेशी कुंजी बाधा है जिस तालिका को आप छोटा करने का प्रयास कर रहे हैं, तो यह काम नहीं करेगा भले ही संदर्भित तालिका में कोई डेटा न हो। ऐसा इसलिए है क्योंकि DML के बजाय DDL के साथ विदेशी कुंजी जाँच की जाती है। यह तालिका में विदेशी कुंजी बाधा (ओं) को अस्थायी रूप से अक्षम करके चारों ओर प्राप्त किया जा सकता है।
डिलीट टेबल एक लॉग ऑपरेशन है। इसलिए प्रत्येक पंक्ति को हटाने से लेन-देन लॉग में लॉग हो जाता है, जिससे यह धीमा हो जाता है। Truncate तालिका एक तालिका में सभी पंक्तियों को हटा भी देती है, लेकिन यह प्रत्येक पंक्ति को हटाने के बजाय लॉग नहीं करेगी, क्योंकि यह तालिका के डेटा पृष्ठों के डीललॉउशन को लॉग करती है, जो इसे तेज़ बनाती है।
~ यदि गलती से आपने Delete / Truncate का उपयोग करके तालिका से सभी डेटा हटा दिया है। आप प्रतिबद्ध लेनदेन को रोलबैक कर सकते हैं। अंतिम बैकअप को पुनर्स्थापित करें और ट्रांजेक्शन लॉग को उस समय तक चलाएं जब डिलीट / ट्रंकट होने वाला हो।
SQL Server 2005 में मेरा मानना है कि आप एक ट्रंकट को रोलबैक कर सकते हैं
हटाएँ
DELETE कमांड का उपयोग किसी तालिका से पंक्तियों को हटाने के लिए किया जाता है। जहां कुछ पंक्तियों को हटाने के लिए एक खंड का उपयोग किया जा सकता है। यदि कोई शर्त निर्दिष्ट नहीं की जाती है, तो सभी पंक्तियों को हटा दिया जाएगा। DELETE ऑपरेशन करने के बाद आपको परिवर्तन को स्थायी बनाने के लिए या इसे पूर्ववत करने के लिए लेन-देन को कम या सीमित करना होगा। ध्यान दें कि इस ऑपरेशन के कारण आग पर मेज पर सभी DELETE ट्रिगर हो जाएंगे।
TRUNCATE
TRUNCATE एक तालिका से सभी पंक्तियों को निकालता है। ऑपरेशन वापस नहीं किया जा सकता है और कोई ट्रिगर नहीं निकाला जाएगा। जैसे, TRUCATE तेज़ है और DELETE के रूप में अधिक पूर्ववत स्थान का उपयोग नहीं करता है।
ड्रॉप
DROP कमांड डेटाबेस से एक टेबल हटाता है। सभी तालिकाओं की पंक्तियों, अनुक्रमित और विशेषाधिकारों को भी हटा दिया जाएगा। कोई डीएमएल ट्रिगर नहीं किया जाएगा। ऑपरेशन वापस नहीं किया जा सकता है।
DROP और TRUNCATE DDL कमांड हैं, जबकि DELETE एक DML कमांड है। इसलिए DELETE परिचालनों को वापस (पूर्ववत) किया जा सकता है, जबकि DROP और TRUNCATE परिचालनों को वापस नहीं लाया जा सकता है।
प्रेषक: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
लेन-देन में लिपटे होने पर TRUNCATE को वापस ले जाया जा सकता है।
कृपया नीचे दो संदर्भ देखें और अपना परीक्षण करें: -
TRUNCATE बनाम DELETE SQL साक्षात्कार के दौरान कुख्यात प्रश्नों में से एक है। बस यह सुनिश्चित करें कि आप इसे इंटरव्यूअर को ठीक से समझाएं या यह आपको काम का खर्च दे सकता है। समस्या यह है कि बहुत से लोग जागरूक नहीं हैं इसलिए सबसे अधिक संभावना है कि वे उत्तर को गलत मानेंगे यदि आप उन्हें बताते हैं कि हां ट्रंकैट को वापस लाया जा सकता है।
मूल उत्तर के लिए एक छोटा सा सुधार - डिलीट भी महत्वपूर्ण मात्रा में रीडो उत्पन्न करता है (जैसा कि पूर्ववत किया गया है कि यह Redo द्वारा संरक्षित है)। इसे ऑटोट्रेस आउटपुट से देखा जा सकता है:
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
यहाँ SQL सर्वर में DELETE और TRUNCATE के अंतर पर मेरा विस्तृत जवाब है
• डेटा निकालें : सबसे पहले, दोनों का उपयोग तालिका से पंक्तियों को हटाने के लिए किया जा सकता है।
लेकिन एक DELETE का उपयोग न केवल तालिका से पंक्तियों को हटाने के लिए किया जा सकता है, बल्कि एक VIEW से या प्रदाता क्षमताओं के अधीन OPENROWSET या OPENQUERY के परिणाम के रूप में भी किया जा सकता है।
• खंड से : DELETE से आप एक तालिका से पंक्तियों को हटा सकते हैं / दूसरे पंक्ति से पंक्तियों के आधार पर पंक्तियों के आधार पर / rowet_function_limited हटा सकते हैं। उस FROM क्लॉज में आप सामान्य जॉइन शर्तों को भी लिख सकते हैं। वास्तव में आप एक SELET स्टेटमेंट से एक DELETE स्टेटमेंट बना सकते हैं जिसमें DELETE के साथ SELECT की जगह और कॉलम नामों को हटाकर कोई एग्रीगेट फ़ंक्शन नहीं है।
TRUNCATE के साथ आप ऐसा नहीं कर सकते।
• जहां : एक ट्रेंक्यू में जहां स्थितियां नहीं हो सकती हैं, लेकिन एक शर्त हो सकती है। इसका मतलब है कि TRUNCATE के साथ आप एक विशिष्ट पंक्ति या विशिष्ट समूह पंक्तियों को हटा नहीं सकते। TRUNCATE टेबल DELETE कथन के समान है, जिसमें कोई भी खंड नहीं है।
• प्रदर्शन : TRUNCATE टेबल तेज है और कम प्रणाली और लेनदेन लॉग संसाधनों का उपयोग करता है। और एक कारण या तो बयानों द्वारा उपयोग किए जाने वाले ताले हैं। DELETE कथन को पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति को हटाने के लिए लॉक किया गया है। TRUNCATE टेबल हमेशा टेबल और पेज को लॉक करता है लेकिन प्रत्येक पंक्ति को नहीं।
• लेन-देन लॉग : DELETE स्टेटमेंट एक बार में पंक्तियों को हटाता है और प्रत्येक पंक्ति के लिए लेन-देन लॉग में व्यक्तिगत प्रविष्टियाँ बनाता है।
TRUNCATE टेबल तालिका डेटा को संग्रहीत करने के लिए उपयोग किए गए डेटा पृष्ठों को हटाकर डेटा को हटाता है और लेनदेन लॉग में केवल पृष्ठ डीलक्लोशंस रिकॉर्ड करता है।
• पृष्ठ : एक DELETE कथन निष्पादित होने के बाद, तालिका में अभी भी खाली पृष्ठ हो सकते हैं। TRUNCATE तालिका डेटा को संग्रहीत करने के लिए उपयोग किए गए डेटा पृष्ठों को डीलिट करके डेटा को निकालता है।
• ट्रिगर : TRUNCATE तालिका पर हटाए गए ट्रिगर्स को सक्रिय नहीं करता है। इसलिए TRUNCATE का उपयोग करते समय आपको बहुत सावधान रहना चाहिए। यदि ट्रिगर हटाए जाने पर कुछ स्वचालित सफाई या लॉगिंग क्रिया करने के लिए ट्रिगर को हटाए जाने पर एक TRUNCATE का उपयोग कभी नहीं किया जाना चाहिए।
• पहचान कॉलम : TRUNCATE के साथ यदि तालिका में एक पहचान स्तंभ है, तो उस स्तंभ के लिए काउंटर स्तंभ के लिए परिभाषित बीज मान पर रीसेट हो जाता है। यदि कोई बीज परिभाषित नहीं किया गया था, तो डिफ़ॉल्ट मान 1 का उपयोग किया जाता है। DELETE पहचान काउंटर को रीसेट नहीं करता है। इसलिए यदि आप पहचान काउंटर को बनाए रखना चाहते हैं, तो इसके बजाय DELETE का उपयोग करें।
• प्रतिकृति : DELETE का उपयोग लेनदेन प्रतिकृति या मर्ज प्रतिकृति में प्रयुक्त तालिका के खिलाफ किया जा सकता है।
जबकि TRUNCATE का उपयोग ट्रांसेक्शनल प्रतिकृति या मर्ज प्रतिकृति में शामिल तालिकाओं के विरुद्ध नहीं किया जा सकता है।
• रोलबैक : DELETE स्टेटमेंट को वापस लाया जा सकता है।
TRUNCATE को वापस भी लुढ़काया जा सकता है, बशर्ते कि यह एक ट्रांजीशन ब्लॉक में संलग्न हो और सत्र बंद न हो। एक बार सत्र बंद हो जाने पर आप रोलबैक TRATECATE नहीं कर पाएंगे।
• प्रतिबंध : अगर यह एक ट्रिगर का उल्लंघन करता है या एक विदेशी कुंजी बाधा के साथ एक और तालिका में एक पंक्ति डेटा द्वारा संदर्भित को दूर करने की कोशिश करता DELETE कथन विफल हो सकता है। यदि DELETE कई पंक्तियों को हटाता है, और हटा दी गई पंक्तियों में से कोई एक ट्रिगर या बाधा का उल्लंघन करता है, तो कथन रद्द कर दिया जाता है, एक त्रुटि वापस आ जाती है, और कोई पंक्तियाँ नहीं निकाली जाती हैं।
और यदि DELETE को View के विरुद्ध उपयोग किया जाता है, तो वह View एक अद्यतन करने योग्य दृश्य होना चाहिए। TRUNCATE को अनुक्रमित दृश्य में उपयोग की गई तालिका के विरुद्ध उपयोग नहीं किया जा सकता है।
TRUNCATE का उपयोग किसी FOREIGN कुंजी बाधा द्वारा संदर्भित तालिका के विरुद्ध नहीं किया जा सकता, जब तक कि उस तालिका में विदेशी कुंजी न हो जो स्वयं संदर्भित होती है।
DECLARE @ai as bigint
SET @ai =IDENT_CURRENT('tablename')
TRUNCATE TABLE tablename
DBCC checkident('tablename', RESEED, @ai)
सबसे बड़ा अंतर यह है कि डिलीट करते समय ट्रंकेट नॉन लॉग ऑपरेशन है।
सीधे शब्दों में इसका मतलब है कि डेटाबेस क्रैश के मामले में, आप ट्रंकट द्वारा संचालित डेटा को पुनर्प्राप्त नहीं कर सकते हैं, लेकिन हटा सकते हैं।
अधिक जानकारी यहाँ
DELETE कथन: यह कमांड केवल उन पंक्तियों को हटाता है जो दी गई स्थिति के आधार पर तालिका से होती है जहाँ कोई शर्त निर्दिष्ट नहीं होने पर तालिका से सभी पंक्तियों को हटा देता है या हटा देता है। लेकिन यह तालिका युक्त स्थान को मुक्त नहीं करता है।
SQL DELETE कथन का सिंटैक्स है:
तालिका से नाम हटाएं [कहां];
TRUNCATE कथन: इस कमांड का उपयोग तालिका से सभी पंक्तियों को हटाने और तालिका युक्त स्थान को मुक्त करने के लिए किया जाता है।
हटाएँ
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/
संक्षेप में, ट्रंकट कुछ भी लॉग नहीं करता है (इसलिए बहुत तेज़ है, लेकिन पूर्ववत नहीं किया जा सकता है) जबकि लॉग लॉग किया गया है (और एक बड़े लेनदेन का हिस्सा हो सकता है, रोलबैक होगा)। यदि आपके पास ऐसा डेटा है जिसे आप देव तालिका में नहीं चाहते हैं तो यह आम तौर पर छोटा हो जाता है क्योंकि आप लेन-देन लॉग भरने का जोखिम नहीं उठाते हैं
यह एक बड़ा कारण है, यह तब है, जब आपको मल्टी-मिलियन रो टेबल में डेटा रिफ्रेश करने की आवश्यकता होती है, लेकिन इसे फिर से बनाना नहीं चाहते। "हटाएं *" हमेशा के लिए ले जाएगा, जबकि ट्रंकट का इत्र प्रभाव नगण्य होगा।
एक dblink पर DDL नहीं कर सकते।
ऐसा नहीं है कि ट्रंकैट SQL सर्वर में कुछ भी लॉग नहीं करता है। truncate किसी भी जानकारी को लॉग नहीं करता है, लेकिन यह उस तालिका के लिए डेटा पृष्ठ के डीक्लोकेशन को लॉग करता है जिस पर आपने TRUNCATE को निकाल दिया था।
और काटे गए रिकॉर्ड को रोलबैक किया जा सकता है यदि हम शुरुआत में लेनदेन को परिभाषित करते हैं और हम इसे रोलबैक करने के बाद छोटे रिकॉर्ड को पुनर्प्राप्त कर सकते हैं। लेकिन कटे हुए लेन-देन के बाद लेन-देन लॉग बैकअप से काटे गए रिकॉर्ड को पुनर्प्राप्त नहीं किया जा सकता है।
एक्सकम्पल को यहां Truncate भी रोलबैक किया जा सकता है
begin Tran
delete from Employee
select * from Employee
Rollback
select * from Employee
SQL में Truncate और Delete दो कमांड हैं जिनका उपयोग टेबल से डेटा को हटाने या हटाने के लिए किया जाता है। हालांकि प्रकृति में काफी बुनियादी दोनों Sql कमांड बहुत परेशानी पैदा कर सकते हैं जब तक कि आप इसे उपयोग करने से पहले विवरण से परिचित नहीं होते हैं। आदेश का गलत चुनाव परिणाम या तो बहुत धीमी प्रक्रिया हो सकता है या लॉग सेगमेंट को भी उड़ा सकता है, यदि बहुत अधिक डेटा हटाने की आवश्यकता है और लॉग सेगमेंट पर्याप्त नहीं है। इसीलिए यह जानना महत्वपूर्ण है कि एसक्यूएल में ट्रंकेट और कमांड का उपयोग कब करना है, लेकिन इनका उपयोग करने से पहले आपको ट्रंकेट और डिलीट के बीच अंतर के बारे में पता होना चाहिए, और उनके आधार पर, हमें यह पता लगाने में सक्षम होना चाहिए कि DELETE हटाने के लिए बेहतर विकल्प है डेटा या TRUNCATE का उपयोग तालिकाओं को शुद्ध करने के लिए किया जाना चाहिए।
जांच का संदर्भ लें यहाँ क्लिक करें
Microsoft sql सर्वर के लिए विशिष्ट एक और अंतर यह है कि delete
आप output
स्टेटमेंट का उपयोग यह जानने के लिए कर सकते हैं कि क्या रिकॉर्ड डिलीट किए गए हैं, जैसे:
delete from [SomeTable]
output deleted.Id, deleted.Name
आप ऐसा नहीं कर सकते truncate
।