Rumah >pangkalan data >tutorial mysql >TRUNCATE vs. DELETE dalam SQL: Bilakah Saya Harus Menggunakan Yang Mana?
Perbezaan antara TRUNCATE dan DELETE dalam SQL
TRUNCATE dan DELETE menyediakan dua pilihan apabila memadam data jadual dalam SQL. Memahami ciri-ciri berbeza mereka adalah penting untuk membuat keputusan termaklum.
Ikhtisar
Jika matlamatnya adalah untuk memadamkan semua baris dalam jadual dengan cepat tanpa menyimpan sebarang data, TRUNCATE biasanya lebih pantas daripada DELETE. Walau bagaimanapun, faktor khusus sistem juga harus dipertimbangkan.
Jenis Penyata
TRUNCATE dikelaskan sebagai pernyataan Bahasa Definisi Data (DDL), manakala DELETE ialah pernyataan Bahasa Manipulasi Data (DML). Perbezaan ini mempengaruhi tingkah laku mereka dalam konteks tertentu.
Komited dan tarik balik
Bergantung pada vendor pangkalan data, TRUNCATE mungkin boleh ditarik balik atau tidak. PostgreSQL dan SQL*Server membenarkan TRUNCATE ditarik balik, manakala Oracle menganggapnya sebagai operasi yang komited.
Kitar Semula Angkasa Lepas
TRUNCATE menuntut semula ruang storan dengan melepaskan segmen data yang diperuntukkan. Padam, sebaliknya, mengekalkan ruang yang diduduki oleh baris yang dipadam.
Julat baris
TRUNCATE memadamkan semua baris dalam jadual, manakala DELETE boleh menyasarkan baris tertentu berdasarkan syarat.
Jenis Objek
TRUNCATE boleh digunakan pada jadual atau keseluruhan kluster (khusus vendor). DELETE berfungsi pada jadual dan jadual dalam kelompok.
Pengecam objek data
Dalam Oracle, DELETE tidak menjejaskan ID objek data, tetapi TRUNCATE akan menetapkan ID baharu melainkan data telah dimasukkan ke dalam jadual sebelum ini.
Kilas Balik (Oracle)
DELETE menyokong kilas balik, membolehkan data dipulihkan daripada keadaan sebelumnya. TRUNCATE, sebaliknya, menghalang kilas balik kepada keadaan sebelum pemangkasan. Walau bagaimanapun, ciri ARKIB FLASHBACK Oracle 11gR2 boleh mengurangkan masalah ini.
Kebenaran
Keupayaan untuk memberikan kebenaran TRUNCATE berbeza-beza mengikut vendor. Oracle memerlukan kebenaran DROP ANY TABLE, manakala sistem lain mungkin membenarkan kebenaran ini diberikan kepada pengguna atau peranan tertentu.
Indeks
TRUNCATE dalam Oracle mendayakan semula indeks yang tidak tersedia. DELETE tidak mempunyai kesan ini.
Kunci Asing
TRUNCATE tidak boleh dilakukan jika terdapat rujukan kunci asing aktif pada jadual. Tingkah laku DELETE bergantung pada konfigurasi kunci asing.
Pencetus
Pencetus DDL boleh diaktifkan dengan operasi TRUNCATE, manakala pencetus DML tidak akan dicetuskan.
Pelaksanaan jarak jauh
Dalam Oracle, TRUNCATE tidak boleh dilakukan melalui pautan pangkalan data.
Lajur identiti
Dalam SQL*Server, TRUNCATE menetapkan semula jujukan lajur IDENTITY, manakala DELETE tidak.
Atas ialah kandungan terperinci TRUNCATE vs. DELETE dalam SQL: Bilakah Saya Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!