1. Apa itu Perintah TRUNCATE
Konsep Dasar TRUNCATE
Perintah TRUNCATE di MySQL adalah sebuah command untuk menghapus semua data dalam tabel sekaligus. Berbeda dengan perintah DELETE yang menghapus baris satu per satu, TRUNCATE bekerja dengan cara membuat ulang tabel secara internal untuk menghapus data. Karena itu, TRUNCATE sangat efektif digunakan ketika ingin menghapus data dalam jumlah besar dengan cepat.
Sintaks Dasar
Sintaks dasar dari TRUNCATE adalah sebagai berikut:
TRUNCATE TABLE nama_tabel;
Dengan ini, semua baris dalam tabel yang ditentukan akan dihapus, dan tabel kembali ke kondisi awal. Namun, data yang dihapus tidak dapat dipulihkan sehingga penggunaannya perlu hati-hati.
Contoh: Penggunaan Dasar
Contoh berikut membuat tabel users
dan menggunakan TRUNCATE untuk menghapus semua datanya:
CREATE TABLE users (
id INT AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
);
INSERT INTO users (name) VALUES ('Taro'), ('Hanako'), ('Jiro');
-- Jalankan TRUNCATE
TRUNCATE TABLE users;
-- Tabel menjadi kosong dan AUTO_INCREMENT direset.
Pada contoh ini, semua data dihapus dan ketika data baru ditambahkan, kolom id
akan mulai lagi dari 1.

2. Perbedaan TRUNCATE dan DELETE
Perbedaan Kecepatan dan Performa
TRUNCATE jauh lebih cepat daripada DELETE karena dirancang khusus untuk menghapus seluruh tabel sekaligus. DELETE menghapus baris per baris, sehingga jika jumlah data sangat banyak, prosesnya bisa menjadi lambat. Sementara itu, TRUNCATE menghapus data dengan membuat ulang tabel, sehingga lebih efisien untuk penghapusan data dalam jumlah besar.
Contoh: Perbandingan Performa
Jika ingin menghapus jutaan baris data, DELETE biasanya ditulis seperti ini:
DELETE FROM users WHERE kondisi;
Sebaliknya, dengan TRUNCATE semua baris bisa dihapus sekaligus seperti berikut:
TRUNCATE TABLE users;
Pada tabel yang sangat besar, perbedaan performa ini akan sangat terlihat. DELETE bisa memakan waktu lama, sedangkan TRUNCATE selesai seketika.
Perbedaan Rollback
TRUNCATE tidak bisa di-rollback. Sekali dijalankan, data akan hilang secara permanen dan tidak bisa dikembalikan. Sebaliknya, DELETE bisa digunakan dalam transaksi sehingga jika terjadi error, data masih bisa dipulihkan dengan rollback. Dari sisi keamanan, ini adalah perbedaan penting.
Perbedaan Penghapusan Selektif
DELETE bisa menggunakan klausa WHERE
untuk menghapus data tertentu, sedangkan TRUNCATE tidak mendukung penghapusan selektif. Misalnya, untuk menghapus user dengan ID 1, gunakan DELETE:
DELETE FROM users WHERE id = 1;
Karena TRUNCATE menghapus semua baris, maka untuk penghapusan data tertentu lebih tepat menggunakan DELETE.
3. Dampak TRUNCATE terhadap AUTO_INCREMENT
Reset AUTO_INCREMENT
TRUNCATE tidak hanya menghapus data, tetapi juga mereset nilai AUTO_INCREMENT. Artinya, saat data baru ditambahkan, ID akan mulai lagi dari 1. Contoh:
INSERT INTO users (name) VALUES ('Ken');
-- id akan mulai lagi dari 1
Reset ini kadang berguna, tetapi jika ID digunakan sebagai foreign key di tabel lain, bisa menyebabkan inkonsistensi data. Jadi perlu hati-hati saat menggunakan TRUNCATE.
4. Hal yang Perlu Diperhatikan Saat Menggunakan TRUNCATE
Data Tidak Bisa Dipulihkan
Risiko terbesar TRUNCATE adalah data yang dihapus tidak bisa dipulihkan. Jika data penting terhapus, tidak ada cara untuk mengembalikannya. Karena itu, selalu lakukan backup sebelum menjalankan TRUNCATE.
Keterbatasan Foreign Key
TRUNCATE tidak bisa digunakan pada tabel yang memiliki constraint foreign key. Untuk itu, constraint harus dilepas dulu atau gunakan cara lain untuk menghapus data terkait.
Batasan Hak Akses
Untuk menjalankan TRUNCATE, user harus memiliki hak DROP pada tabel. Jika tidak memiliki hak tersebut, TRUNCATE tidak dapat dijalankan.

5. Kapan Menggunakan TRUNCATE atau DELETE
Kapan Menggunakan TRUNCATE
TRUNCATE tepat digunakan ketika ingin menghapus semua data tabel sekaligus, terutama saat perlu mengosongkan tabel dengan cepat atau ingin mereset AUTO_INCREMENT. Misalnya, saat mengulang pengujian dengan data dummy.
Kapan Menggunakan DELETE
DELETE lebih tepat digunakan ketika ingin menghapus baris tertentu berdasarkan kondisi, atau ketika trigger database perlu dijalankan. DELETE menjaga konsistensi data lebih baik dalam kasus ini.
6. Praktik Terbaik Menggunakan TRUNCATE dengan Aman
Pentingnya Backup
Sebelum menjalankan TRUNCATE, selalu lakukan backup data. Kehilangan data di production tanpa backup bisa berakibat fatal.
Uji di Lingkungan Test
Sebelum menjalankan TRUNCATE di production, sebaiknya diuji dulu di test environment. Hal ini mencegah masalah yang tidak diinginkan.
Kelola AUTO_INCREMENT
Karena TRUNCATE mereset AUTO_INCREMENT, penting untuk memastikan tidak terjadi konflik dengan tabel lain yang menggunakan foreign key. Selalu cek relasi tabel sebelum menjalankan TRUNCATE.