Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbedaan Antara Tabel DELETE dan TRUNCATE di SQL Server

Banyak artikel telah ditulis untuk menjelaskan perbedaan antara pernyataan SQL DELETE dan SQL TRUNCATE. Selain itu, ini adalah salah satu pertanyaan paling umum selama wawancara kerja. Kedua pernyataan menghapus data dari tabel. Namun, ada juga perbedaan.

Artikel ini akan fokus pada perbedaan ini dan mengilustrasikannya dengan contoh praktis.

Ringkasan Perbedaan Hapus vs Potong

Memotong pernyataan Tabel HAPUS pernyataan
Menghapus semua record dari tabel. Kami tidak dapat menerapkan klausa WHERE untuk menghapus catatan tertentu. Menghapus semua catatan dan dapat menerapkan klausa WHERE untuk menghapus catatan tertentu.
Tidak mengaktifkan HAPUS pemicu. Mengeksekusi HAPUS pemicu.
Menyetel ulang nilai identitas. Tidak menyetel ulang nilai identitas.
Lebih cepat karena penggunaan log transaksi yang minimal. Lebih lambat karena melakukan pemindaian tabel awal untuk menghitung jumlah baris yang akan dihapus dan dihapus satu per satu. Perubahan dicatat dalam log transaksi.
Menggunakan kunci tingkat baris. Menggunakan kunci tingkat tabel.
Tidak dapat digunakan dengan tampilan yang diindeks. Dapat digunakan dengan tampilan yang diindeks.
Memerlukan ALTER TABLE izin. Memerlukan HAPUS izin di atas meja.

Untuk tujuan demonstrasi, saya telah membuat tabel bernama studentDB . Di sana, saya telah membuat dua tabel, tblSchool dan tblStudent , dan menyisipkan beberapa record di kedua tabel.

Skrip berikut membuat tblStudent tabel:

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

Skrip ini membuat tblSchool tabel:

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

Skrip berikut memasukkan data ke dalam tblStudent tabel:

/*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

Script di bawah ini memasukkan data ke dalam tblSchool tabel:

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

Sekarang, mari kita kenali perbedaan antara pernyataan tersebut.

Perbedaan 1:Menghapus data

Perintah DELETE berfungsi untuk menghapus record tertentu/semua dari tabel. Pernyataan TRUNCATE menghapus semua data.

Kami akan menjelajahi skenario ini.

HAPUS Pernyataan

Untuk menghapus record tertentu dengan DELETE, kita dapat menggunakan klausa WHERE dalam query. Misalkan kita ingin menghapus beberapa siswa dari tblstudent tabel, kode siswa adalah ST002 .

Tambahkan filter dalam pernyataan DELETE sebagai berikut:

Delete from  tblstudent where student_code='ST002'

Kueri ini hanya akan menghapus satu record dari tabel.

Setelah catatan dihapus, jalankan pilih kueri untuk melihat data:

Select * from tblstudent

Pernyataan TRUNCATE TABLE

Di tabel truncate, menambahkan klausa WHERE tidak mungkin.

Kueri berikut menghapus semua catatan dari tblStudent tabel:

Truncate table tblStudent

Perbedaan 2:Pemicu

Saat kita menjalankan perintah DELETE, SQL Server memanggil pemicu DELETE.

Saya telah membuat pemicu bernama trgdeleteStudent di tblStudent . Saat kita mengeksekusi pernyataan DELETE pada tblstudent tabel, pemicu menyisipkan catatan dalam tblDeletedStudent tabel.

Kode T-SQL untuk membuat tbldeletedStudent adalah sebagai berikut:

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

Kode T-SQL di bawah ini membuat pemicu:

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

Jalankan kueri di bawah ini untuk menghapus catatan siswa ST0001 :

delete from tblstudent where student_code='ST001'

Jalankan kueri berikut untuk memverifikasi:

select * from [dbo].[tblDelatedStudents]

Seperti yang Anda lihat pada tangkapan layar di atas, sebuah catatan telah ditambahkan ke tabel.

Sekarang, mari kita jalankan pernyataan TRUNCATE TABLE untuk menghapus data dari tblstudent tabel:

Truncate table [dbo].[tblDelatedStudents]

Verifikasi data dengan menanyakan tblDeletedStudent :

select * from [dbo].[tblDelatedStudents]

Seperti yang Anda lihat, catatan belum dimasukkan ke dalam tabel tblDeletedStudent .Dengan demikian, trgdeletestudent pemicu tidak menyala.

Perbedaan 3:Menyetel ulang nilai identitas

Saat kami menjalankan perintah DELETE, nilai identitas tidak akan diatur ulang ke nilai awal. Untuk eksekusi pernyataan tabel TRUNCATE, nilai identitas akan direset.

HAPUS Pernyataan

Jalankan pernyataan DELETE di bawah ini untuk menghapus data dari tblStudent tabel:

delete from tblStudent where student_code='ST004'

Kemudian, jalankan masukkan kueri berikut untuk menambahkan catatan ke tblStudent tabel:

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

Jalankan kueri berikut untuk melihat data tblStudent :

select * from [dbo].[tblStudent]

Gambar di atas menunjukkan bahwa nilai kolom identitas awal bertambah satu.

TRUNCATE TABEL

Jalankan pernyataan TRUNCATE TABLE di bawah ini untuk menghapus data dari tblStudent tabel:

Truncate table [dbo].[tblStudents]

Setelah data dihapus, masukkan record ke dalam tabel:

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

Jalankan kueri SELECT untuk melihat data:

select * from [dbo].[tblStudent]

Seperti yang Anda lihat pada gambar di atas, nilai identitas telah disetel ulang.

Perbedaan 4:Izin

Untuk menghapus data menggunakan pernyataan DELETE, kita harus memiliki izin DELETE pada tabel.

Untuk menghapus data menggunakan pernyataan TRUNCATE TABLE, kami memerlukan izin ALTER TABLE.

HAPUS Pernyataan

Saya telah membuat pengguna bernama testuser1 dan menetapkan izin DELETE pada tblStudent tabel.

Kami menghapus catatan siswa dengan student_code=ST001 :

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

Jalankan pilih kueri untuk melihat data:

Itu menghapus catatan dari tabel.

TRUNCATE TABEL

Sekarang, jalankan TRUNCATE TABLE untuk menghapus data:

use StudentDB
go
truncate table tblstudent

Kueri mengembalikan kesalahan berikut:

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

Untuk memperbaiki ini, kita harus menetapkan izin ALTER TABLE .

Jalankan kueri berikut untuk memberikan akses ke testuser1 di tblStudent tabel:

grant ALTER on tblstudent to testuser1

Jalankan kembali pernyataan tabel truncate:

use StudentDB
go
truncate table tblstudent

Lihat data dari tabel:

Data telah dihapus dari tabel.

Ringkasan

Artikel ini menjelaskan perbedaan antara pernyataan SQL DELETE dan pernyataan SQL TRUNCATE TABLE. Kami telah mendefinisikan semua fitur penting dan mengilustrasikannya dengan contoh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL - Tambahkan Kolom ke Semua Tabel di Database [ Contoh Kursor]

  2. Perbaiki "tanggal tidak kompatibel dengan int" di SQL Server saat Menambah atau Mengurangi dari Tanggal

  3. Bagaimana cara terhubung ke mssql menggunakan pdo melalui PHP dan Linux?

  4. Memecahkan masalah Replikasi SQL Server

  5. Memantau Database dan Instance melalui Activity Monitor | Pemecahan Masalah Kinerja SQL Server -2