Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में DELETE और TRUNCATE तालिका के बीच अंतर

SQL DELETE और SQL TRUNCATE कथनों के बीच अंतर का वर्णन करने के लिए कई लेख लिखे गए हैं। इसके अलावा, यह नौकरी के साक्षात्कार के दौरान सबसे आम प्रश्नों में से एक है। दोनों कथन तालिका से डेटा हटाते हैं। हालांकि, मतभेद भी हैं।

यह लेख इन अंतरों पर ध्यान केंद्रित करेगा और व्यावहारिक उदाहरणों के साथ उन्हें स्पष्ट करेगा।

अंतर का सारांश हटाएं बनाम छोटा करें

टेबल स्टेटमेंट छोटा करें विवरण हटाएं
तालिका से सभी रिकॉर्ड हटाता है। हम विशिष्ट रिकॉर्ड को हटाने के लिए WHERE क्लॉज लागू नहीं कर सकते। सभी रिकॉर्ड हटा देता है और विशिष्ट रिकॉर्ड को हटाने के लिए WHERE क्लॉज लागू कर सकता है।
हटाएं को सक्रिय नहीं करता ट्रिगर। हटाएं निष्पादित करता है ट्रिगर।
पहचान मान को रीसेट करता है। पहचान मान को रीसेट नहीं करता है।
लेन-देन लॉग के न्यूनतम उपयोग के कारण तेज़ है। एक-एक करके पंक्तियों को हटाने और हटाने के लिए पंक्तियों की संख्या की गणना करने के लिए प्रारंभिक तालिका स्कैन करने के कारण धीमा है। लेन-देन लॉग में परिवर्तन लॉग इन हैं।
पंक्ति-स्तरीय लॉक का उपयोग करता है। टेबल-लेवल लॉक का उपयोग करता है।
अनुक्रमित दृश्यों के साथ उपयोग नहीं किया जा सकता। अनुक्रमित दृश्यों के साथ उपयोग किया जा सकता है।
वैकल्पिक तालिका की आवश्यकता है अनुमति। हटाएं की आवश्यकता है मेज पर अनुमति।

प्रदर्शन उद्देश्यों के लिए, मैंने studentDB . नाम की एक तालिका बनाई है . वहां, मैंने दो टेबल बनाई हैं, tblSchool और tblStudent , और दोनों तालिकाओं में कुछ रिकॉर्ड डाले।

निम्न स्क्रिप्ट tblStudent . बनाती है तालिका:

CREATE TABLE [dbo].[tblStudent](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[student_name] [varchar](250) NOT NULL,
	[student_code] [varchar](5) NOT NULL,
	[student_grade] [char](2) NOT NULL,
	[SchoolID] [int] NOT NULL,
 CONSTRAINT [PK_tblStudent] PRIMARY KEY CLUSTERED 
( [ID] ASC))
GO
ALTER TABLE [dbo].[tblStudent]  WITH CHECK ADD  CONSTRAINT [FK_tblStudent_tblSchool] FOREIGN KEY([SchoolID])
REFERENCES [dbo].[tblSchool] ([School_ID])
GO

ALTER TABLE [dbo].[tblStudent] CHECK CONSTRAINT [FK_tblStudent_tblSchool]
GO

यह स्क्रिप्ट tblSchool . का निर्माण करती है तालिका:

CREATE TABLE [dbo].[tblSchool](
	[School_ID] [int] IDENTITY(1,1) NOT NULL,
	[School_Name] [varchar](500) NULL,
	[City] [varchar](50) NULL,
CONSTRAINT [PK_tblSchool] PRIMARY KEY CLUSTERED 
([School_ID] ASC)) ON [PRIMARY]
GO

निम्न स्क्रिप्ट tblStudent . में डेटा सम्मिलित करती है तालिका:

/*Insert Data in tblStudent*/
insert into [dbo].[tblStudent] ([student_name],[student_code],[student_grade],[SchoolID]) 
values 
('Nisarg Upadhyay','ST001','A',1),
('Nirali Upadhyay','ST002','B',1),
('Dixit Upadhyay','ST003','A',1),
('Bharti Upadhyay','ST004','C',2),
('Nimesh Patel','ST005','C',2),
('Raghav Dave','ST006','A',1)
Go

नीचे दी गई स्क्रिप्ट tblSchool . में डेटा सम्मिलित करती है तालिका:

insert into [dbo].[tblSchool] ([school_name], [city]) 
values 
('Nalanda School','Mehsana'),
('Sarvajanik School','Mehsana')

अब, कथनों के बीच के अंतरों को पहचानें।

अंतर 1:डेटा हटाना

DELETE कमांड टेबल से विशिष्ट/सभी रिकॉर्ड्स को हटाने का काम करता है। TRUNCATE कथन सभी डेटा को हटा देता है।

हम इस परिदृश्य का पता लगाएंगे।

विवरण हटाएं

DELETE के साथ विशिष्ट रिकॉर्ड को हटाने के लिए, हम क्वेरी में WHERE क्लॉज का उपयोग कर सकते हैं। मान लीजिए कि हम tblstudent . से कुछ विद्यार्थियों को हटाना चाहते हैं तालिका, छात्र का कोड है ST002

फ़िल्टर को DELETE कथन में इस प्रकार जोड़ें:

Delete from  tblstudent where student_code='ST002'

यह क्वेरी तालिका से केवल एक रिकॉर्ड को हटा देगी।

एक बार रिकॉर्ड हटा दिए जाने के बाद, चयन करें run चलाएं डेटा देखने के लिए क्वेरी:

Select * from tblstudent

टेबल स्टेटमेंट को छोटा करें

ट्रंकेट टेबल में, WHERE क्लॉज जोड़ना असंभव है।

निम्न क्वेरी tblStudent . से सभी रिकॉर्ड हटा देती है तालिका:

Truncate table tblStudent

अंतर 2:ट्रिगर

जब हम DELETE कमांड चलाते हैं, तो SQL सर्वर DELETE ट्रिगर्स को इनवाइट करता है।

मैंने एक ट्रिगर बनाया है जिसका नाम है trgdeleteStudent tblStudent . पर . जब हम tblstudent . पर DELETE कथन निष्पादित करते हैं तालिका में, ट्रिगर एक tblDeletedStudent . में एक रिकॉर्ड सम्मिलित करता है टेबल।

tbldeletedStudent . बनाने के लिए T-SQL कोड निम्नलिखित है:

CREATE TABLE [dbo].[tblDelatedStudents]
(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Student_Code] [varchar](10) NULL,
	CONSTRAINT [PK_tblDelatedStudents] PRIMARY KEY CLUSTERED ([ID] ASC)
)

नीचे दिया गया T-SQL कोड ट्रिगर बनाता है:

create TRIGGER trgdeleteStudent on [tblStudent]
FOR DELETE 
AS 
INSERT INTO [dbo].[tblDelatedStudents](student_code)
  SELECT student_code
FROM DELETED;
GO

छात्र के रिकॉर्ड को हटाने के लिए नीचे दी गई क्वेरी चलाएँ ST0001 :

delete from tblstudent where student_code='ST001'

सत्यापित करने के लिए निम्न क्वेरी चलाएँ:

select * from [dbo].[tblDelatedStudents]

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

अब, tblstudent से डेटा निकालने के लिए TRUNCATE TABLE स्टेटमेंट को रन करें तालिका:

Truncate table [dbo].[tblDelatedStudents]

tblDeletedStudent . को क्वेरी करके डेटा सत्यापित करें :

select * from [dbo].[tblDelatedStudents]

जैसा कि आप देख सकते हैं, रिकॉर्ड tblDeletedStudent तालिका में सम्मिलित नहीं किए गए हैं .इस प्रकार, trgdeletesttudent ट्रिगर सक्रिय नहीं हुआ।

अंतर 3:पहचान मान रीसेट करना

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

विवरण हटाएं

tblStudent . से डेटा हटाने के लिए नीचे दिया गया DELETE कथन चलाएँ तालिका:

delete from tblStudent where student_code='ST004'

फिर, निम्न क्वेरी सम्मिलित करें निष्पादित करें tblStudent . में रिकॉर्ड जोड़ने के लिए टेबल:

insert into [dbo].[tblStudent] ([student_name],[student_code],[student_grade],[SchoolID]) 
values 
('Ramesh Upadhyay','ST007','B',2)
Go

tblStudent . का डेटा देखने के लिए निम्न क्वेरी चलाएँ :

select * from [dbo].[tblStudent]

उपरोक्त छवि से पता चलता है कि प्रारंभिक पहचान कॉलम मान एक से बढ़ा हुआ है।

टेबल को छोटा करें

tblStudent से डेटा हटाने के लिए नीचे TRUNCATE TABLE कथन चलाएँ तालिका:

Truncate table [dbo].[tblStudents]

एक बार डेटा हटा दिए जाने के बाद, तालिका में रिकॉर्ड डालें:

insert into [dbo].[tblStudent] ([student_name],[student_code],[student_grade],[SchoolID]) 
values 
('Nisarg Upadhyay','ST001','A',1),
('Nirali Upadhyay','ST002','B',1),
('Dixit Upadhyay','ST003','A',1),
('Bharti Upadhyay','ST004','C',2),
('Nimesh Patel','ST005','C',2),
('Raghav Dave','ST006','A',1)
Go

डेटा देखने के लिए सेलेक्ट क्वेरी चलाएँ:

select * from [dbo].[tblStudent]

जैसा कि आप ऊपर की छवि में देख सकते हैं, पहचान मान को रीसेट कर दिया गया है।

अंतर 4:अनुमतियां

DELETE स्टेटमेंट का उपयोग करके डेटा को हटाने के लिए, हमारे पास टेबल पर DELETE अनुमति होनी चाहिए।

TRUNCATE TABLE स्टेटमेंट का उपयोग करके डेटा को निकालने के लिए, हमें ALTER TABLE अनुमति की आवश्यकता होती है।

विवरण हटाएं

मैंने एक उपयोगकर्ता बनाया है जिसका नाम है testuser1 और tblStudent . पर DELETE अनुमति असाइन की गई टेबल।

हम student_code=ST001 . के साथ छात्र का रिकॉर्ड हटा देते हैं :

use StudentDB
go
delete from tblstudent where student_code='ST001'

चुनेंचलाएं डेटा देखने के लिए क्वेरी:

इसने तालिका से रिकॉर्ड हटा दिया।

टेबल को छोटा करें

अब, डेटा हटाने के लिए TRUNCATE TABLE चलाएँ:

use StudentDB
go
truncate table tblstudent

क्वेरी निम्न त्रुटि लौटाती है:

Msg 1088, Level 16, State 7, Line 3
Cannot find the object "tblstudent" because it does not exist or you do not have permissions
.

इसे सुधारने के लिए, हमें ALTER TABLE अनुमति देनी होगी

testuser1 . तक पहुंच प्रदान करने के लिए निम्न क्वेरी चलाएँ tblStudent . पर तालिका:

grant ALTER on tblstudent to testuser1

ट्रंकेट टेबल स्टेटमेंट को फिर से चलाएँ:

use StudentDB
go
truncate table tblstudent

तालिका से डेटा देखें:

तालिका से डेटा हटा दिया गया है।

सारांश

इस आलेख ने SQL DELETE कथन और SQL TRUNCATE तालिका कथन के बीच के अंतरों को समझाया। हमने सभी आवश्यक विशेषताओं को परिभाषित किया है और उन्हें उदाहरणों के साथ चित्रित किया है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में किसी बड़ी तालिका में आप NOT NULL कॉलम कैसे जोड़ते हैं?

  2. SQL सर्वर में एकाधिक कॉलम पर अद्वितीय बाधा कैसे बनाएं - SQL सर्वर / TSQL ट्यूटोरियल भाग 96

  3. SQL सर्वर कनेक्शन स्ट्रिंग में प्रारंभिक कैटलॉग का क्या मतलब है?

  4. एक संग्रहीत प्रक्रिया पैरामीटर सूची में एक अभिव्यक्ति (जैसे फ़ंक्शन कॉल) के परिणाम का उपयोग करना?

  5. SQL सर्वर में दी गई फ़ाइल आईडी के लिए तार्किक फ़ाइल नाम वापस करने के लिए FILE_NAME() का उपयोग करें