1. Apa Itu Pernyataan TRUNCATE?
Konsep Dasar Pernyataan TRUNCATE
Pernyataan TRUNCATE MySQL adalah perintah yang digunakan untuk menghapus semua data dari sebuah tabel sekaligus. Tidak seperti pernyataan DELETE, yang menghapus baris satu per satu, TRUNCATE menghapus data dengan cara merekonstruksi tabel secara internal. Akibatnya, perintah ini sangat efektif untuk menghapus sejumlah besar data dengan efisien.
Sintaks Dasar
Sintaks dasar pernyataan TRUNCATE adalah sebagai berikut:
TRUNCATE TABLE table_name;
Ini menghapus semua baris dari tabel yang ditentukan dan mengembalikan tabel ke keadaan awalnya. Namun, karena data yang dihapus tidak dapat dipulihkan, perintah ini harus digunakan dengan hati-hati.
Contoh: Penggunaan Dasar
Pada contoh berikut, sebuah tabel bernama users dibuat, dan pernyataan TRUNCATE digunakan 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');
-- Execute TRUNCATE
TRUNCATE TABLE users;
-- The table becomes empty, and AUTO_INCREMENT is reset.
Pada contoh ini, semua data dalam tabel dihapus, dan ketika data baru dimasukkan, kolom id kembali dimulai dari 1. 
2. Perbedaan Antara TRUNCATE dan DELETE
Perbedaan Kecepatan dan Kinerja
TRUNCATE secara khusus dioptimalkan untuk menghapus seluruh data tabel sehingga jauh lebih cepat dibandingkan DELETE. Karena DELETE menghapus baris satu per satu, prosesnya dapat menjadi lambat ketika menangani sejumlah besar baris. Sebaliknya, TRUNCATE menghapus data dengan cara merekonstruksi tabel secara internal, menjadikannya sangat efisien untuk menghapus volume data yang besar.
Contoh: Perbandingan Kinerja
Saat menghapus jutaan baris, pernyataan DELETE akan ditulis sebagai berikut:
DELETE FROM users WHERE condition;
Sebagai perbandingan, menggunakan TRUNCATE memungkinkan Anda menghapus semua baris sekaligus:
TRUNCATE TABLE users;
Perbedaan menjadi sangat terasa ketika tabel berukuran sangat besar. Operasi yang memakan waktu signifikan dengan DELETE dapat selesai hampir seketika dengan TRUNCATE.
Perbedaan Rollback
Pernyataan TRUNCATE tidak dapat di‑rollback. Setelah dijalankan, data dihapus secara permanen dan tidak dapat dipulihkan kembali. Di sisi lain, ketika DELETE digunakan dalam sebuah transaksi, perintah tersebut dapat di‑rollback jika terjadi kesalahan, sehingga data dapat dipulihkan. Ini merupakan perbedaan penting dari perspektif keamanan.
Perbedaan Penghapusan Selektif
Pernyataan DELETE memungkinkan Anda menghapus baris berdasarkan kondisi tertentu menggunakan klausa WHERE, tetapi TRUNCATE tidak mendukung penghapusan selektif. Misalnya, jika Anda ingin menghapus hanya satu pengguna tertentu, Anda akan menggunakan DELETE seperti contoh di bawah ini:
DELETE FROM users WHERE id = 1;
Karena TRUNCATE menghapus semua baris, DELETE lebih tepat digunakan ketika Anda perlu menghapus hanya catatan tertentu saja.
3. Dampak TRUNCATE pada AUTO_INCREMENT
Mengatur Ulang AUTO_INCREMENT
Ketika Anda menggunakan pernyataan TRUNCATE, semua data dalam tabel dihapus dan nilai AUTO_INCREMENT diatur ulang secara bersamaan. Ini berarti bahwa ketika data baru ditambahkan, ID akan kembali dimulai dari 1. Sebagai contoh, jika Anda memasukkan data baru ke dalam tabel users, hasilnya akan seperti berikut:
INSERT INTO users (name) VALUES ('Ken');
-- The id starts again from 1
Pengaturan ulang ini dapat berguna dalam situasi tertentu. Namun, perlu berhati‑hati, terutama bila ID digunakan sebagai kunci asing di tabel lain. Inkonsistensi data yang tidak terduga dapat terjadi, jadi pertimbangkan implikasinya dengan cermat sebelum menggunakan TRUNCATE.
4. Pertimbangan Penting Saat Menggunakan TRUNCATE
Data Tidak Dapat Dipulihkan
Risiko terbesar dari pernyataan TRUNCATE adalah bahwa data tidak dapat dipulihkan. Jika data penting terhapus secara tidak sengaja, data tersebut tidak dapat dikembalikan. Oleh karena itu, sangat disarankan untuk mencadangkan data Anda sebelum mengeksekusi perintah ini.
Kendala Kunci Asing
Pernyataan TRUNCATE tidak dapat digunakan pada tabel yang memiliki batasan kunci asing (foreign key) yang diaktifkan. Dalam kasus seperti itu, Anda harus terlebih dahulu menghapus batasan kunci asing atau menangani data terkait melalui metode lain.
Hak Eksekusi
Untuk mengeksekusi pernyataan TRUNCATE, Anda harus memiliki hak penghapusan tabel (hak DROP). Pengguna yang tidak memiliki izin yang diperlukan tidak dapat menjalankan perintah ini, jadi pastikan untuk memverifikasi hak yang sesuai terlebih dahulu.

5. Kapan Menggunakan TRUNCATE vs DELETE
Kapan Anda Harus Menggunakan TRUNCATE
TRUNCATE cocok ketika Anda perlu menghapus seluruh tabel sekaligus. Ini sangat berguna ketika Anda ingin menghapus semua data dengan cepat atau ketika mereset AUTO_INCREMENT diinginkan. Misalnya, ini ideal ketika Anda ingin mereset data uji secara berulang.
Kapan Anda Harus Menggunakan DELETE
Di sisi lain, jika diperlukan penghapusan baris secara selektif atau eksekusi trigger, Anda harus menggunakan pernyataan DELETE. Ketika menghapus data berdasarkan kondisi tertentu atau menjaga integritas basis data dengan aman, DELETE lebih tepat.
6. Praktik Terbaik untuk Menggunakan TRUNCATE dengan Aman
Pentingnya Cadangan
Sebelum mengeksekusi pernyataan TRUNCATE, penting untuk membuat cadangan data. Karena kehilangan data akibat penghapusan tidak sengaja tidak dapat dipulihkan, diperlukan kehati-hatian ekstra, terutama di lingkungan produksi.
Verifikasi di Lingkungan Pengujian
Sebelum menjalankan TRUNCATE di lingkungan produksi, disarankan untuk mengujinya di lingkungan pengembangan atau staging. Hal ini memungkinkan Anda memastikan bahwa perilakunya sesuai harapan dan membantu mencegah masalah yang tidak terduga.
Mengelola Kolom AUTO_INCREMENT
Karena TRUNCATE mereset AUTO_INCREMENT, jika menjaga konsistensi ID unik penting, Anda harus memverifikasi cadangan data dan hubungan dengan tabel lain sebelum mengeksekusinya.


