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

SQL Server:DELETE vs TRUNCATE

T-SQL menyediakan dua kata kunci yang memungkinkan Anda menghapus data dari tabel. Mereka HAPUS dan POTONGKAT . Ini sama dalam apa yang mereka lakukan, namun, mereka menggunakan metode yang sangat berbeda. Dalam artikel ini, kami membahas mekanisme yang mendasari kata kunci tersebut.

Perbedaan antara TRUNCATE dan DELETE

POTONG:

  1. TRUNCATE adalah perintah DDL.
  2. TRUNCATE TABLE selalu mengunci tabel dan halaman. Namun, itu tidak mengunci setiap baris.
  3. Kondisi WHERE tidak dapat digunakan.
  4. Perintah menghapus semua data.
  5. TRUNCATE TABLE tidak dapat mengaktifkan pemicu karena operasi tidak mencatat penghapusan baris satu per satu.
  6. Kinerjanya lebih cepat, karena tidak menyimpan log.
  7. Pembalikan dimungkinkan.

HAPUS:

  1. HAPUS adalah Perintah DML.
  2. Pernyataan DELETE menggunakan kunci baris saat mengeksekusi. Setiap baris dalam tabel dikunci untuk dihapus.
  3. Anda dapat menentukan filter dalam klausa WHERE.
  4. Perintah menghapus data yang ditentukan jika kondisi WHERE ada.
  5. DELETE mengaktifkan pemicu karena operasi dicatat satu per satu.
  6. DELETE lebih lambat dari TRUNCATE karena menyimpan log.
  7. Pembalikan dimungkinkan.

Bagaimana cara menghapus data dengan bantuan TRUNCATE?

Contoh berikut menghapus semua data dari tabel Person. PILIH pernyataan disertakan sebelum dan sesudah TRUNCATE TABLE pernyataan untuk membandingkan hasil.

USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

Mari kita soroti beberapa keuntungan.

TRUNCATE TABLE perintah menghapus semua baris dari tabel dengan membatalkan alokasi halaman data yang digunakan untuk menyimpan data tabel. Setelah operasi selesai, tabel berisi nol halaman. Itu tidak ada logging untuk penghapusan baris individu. Perintah mencatat dealokasi halaman ke log transaksi. PUNCATE perintah menggunakan lebih sedikit ruang log. Lebih sedikit kunci biasanya digunakan. Perintah menghapus semua baris dari tabel, tetapi struktur tabel dan kolomnya, batasan, indeks, dan sebagainya tetap ada. Untuk menghapus tabel. anda perlu menggunakan DROP TABLE .

Jika tabel berisi kolom identitas, penghitung untuk kolom tersebut diatur ulang ke nilai benih yang ditentukan untuk kolom tersebut. Jika tidak ada benih yang ditentukan, nilai default 1 digunakan. Untuk mempertahankan penghitung identitas, gunakan HAPUS sebagai gantinya.

Menghapus semua baris dengan menggunakan DELETE

Contoh berikut menghapus semua baris dari tabel Person:

DELETE FROM Person.Person;
GO

HAPUS menghapus baris satu per satu. Perintah menambahkan catatan baru ke log transaksi untuk setiap baris yang dihapus. HAPUS menggunakan kunci baris saat mengeksekusi, yang berarti setiap baris dalam tabel dikunci untuk dihapus. Sekali HAPUS dijalankan, sebuah tabel masih dapat berisi halaman data kosong. Misalnya, halaman kosong di heap tidak dapat dialokasikan tanpa setidaknya kunci tabel eksklusif (LCK_M_X). HAPUS dan POTONGKAH keduanya dapat dibatalkan saat digunakan dengan TRANSAKSI .

Baca juga

Perbedaan Antara Tabel DELETE dan TRUNCATE di SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemulihan Cadangan Paralel SQL Server -2

  2. Memahami Alias ​​Kolom di Select Query di SQL Server - Tutorial SQL Server / TSQL Bagian 115

  3. Penghapusan Otomatis Proses Terjebak di MS SQL Server

  4. grup sql dengan versus berbeda

  5. Cara Menangani Kesalahan dalam Transaksi Bersarang SQL Server