script delete truncate mysql | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: script delete truncate mysql

Tuesday, April 7, 2026

script delete truncate mysql


Beranda Tutorial MySQL Artikel 17
๐ŸŸก Menengah ๐Ÿ—„️ Data Manipulation ⏱ 8 Menit Baca ๐Ÿ“Œ Seri 17 dari 28

Menghapus Data: Perintah DELETE dan TRUNCATE

Panduan lengkap menguasai dua senjata ampuh untuk membersihkan data di MySQL — tahu kapan pakai yang mana bisa menyelamatkan database-mu!

2
Perintah SQL
12
Contoh Query
8
Menit Baca

Pernah nggak kamu nyimpan tumpukan data sampah di lemari, terus bingung mau bersihin dari mana? Nah, di dunia database MySQL, masalah yang sama bisa terjadi — tabel penuh data yang sudah tidak relevan, entri duplikat, atau sisa uji coba yang perlu disingkirkan. Di sinilah dua perintah legendaris hadir: DELETE dan TRUNCATE. Kalau kamu sudah sampai di artikel ke-17 dari seri 28 artikel Belajar Query SQL MySQL ini, berarti kamu sudah serius tuh!

Memahami DELETE TRUNCATE MySQL bukan sekadar hafalan sintaks — ini tentang keselamatan data-mu. Salah pilih perintah, bisa-bisa data yang harusnya dipertahankan malah ikut hilang. Di artikel ini, kita akan bedah keduanya sampai ke akar, lengkap dengan contoh studi kasus toko online, perbandingan head-to-head, dan tips praktis yang langsung bisa kamu terapkan. Let's go! ๐Ÿš€

⚡ Fakta Menarik

Menurut survei Stack Overflow Developer Survey, SQL masih menjadi salah satu bahasa yang paling banyak digunakan oleh developer di seluruh dunia — dan perintah DELETE adalah salah satu yang paling sering menyebabkan "oops moment" di production! Satu perintah DELETE tanpa klausa WHERE bisa menghapus ribuan baris data dalam hitungan detik. Itulah kenapa DBA (Database Administrator) profesional selalu bilang: "Think twice before you DELETE."

๐Ÿ—‘️ Perintah DELETE: Hapus Data dengan Presisi

Bayangkan kamu punya buku catatan pesanan toko online. Kamu ingin menghapus catatan pesanan tertentu yang sudah dibatalkan — bukan semua catatan, hanya yang spesifik. Itulah fungsi utama perintah DELETE di MySQL: menghapus baris tertentu dari tabel berdasarkan kondisi yang kamu tentukan.

๐Ÿ“‹ Sintaks DELETE
DELETE FROM nama_tabel
WHERE kondisi;

-- Keterangan:
-- DELETE FROM  → perintah untuk menghapus baris
-- nama_tabel   → tabel target yang datanya mau dihapus
-- WHERE        → filter kondisi (WAJIB ADA, kecuali mau hapus semua!)
-- kondisi      → kriteria baris yang akan dihapus

Misalkan kita punya tabel pesanan di toko online kita. Ada pesanan dengan status "dibatalkan" yang ingin dihapus dari sistem:

๐Ÿ“Š Data awal tabel pesanan:

id_pesanan id_pelanggan total status
1101Rp 250.000selesai
2102Rp 175.000dibatalkan
3103Rp 320.000diproses
4104Rp 90.000dibatalkan
๐Ÿ’ป Query SQL
DELETE FROM pesanan
WHERE status = 'dibatalkan';

-- Menghapus semua pesanan dengan status 'dibatalkan'
-- Output: Query OK, 2 rows affected

๐Ÿ“Š Hasil setelah DELETE:

id_pesanan id_pelanggan total status
1101Rp 250.000selesai
3103Rp 320.000diproses
๐Ÿ’ก Tip Praktis

Sebelum menjalankan DELETE, coba jalankan dulu SELECT * FROM pesanan WHERE status = 'dibatalkan' untuk memastikan baris yang akan terhapus sesuai ekspektasi. Anggap ini seperti "preview" sebelum kamu pencet tombol hapus. Kebiasaan kecil ini bisa menyelamatkan kamu dari banyak drama di masa depan!

DELETE dengan LIMIT — Kontrol Lebih Ketat

MySQL juga memungkinkan kamu menambahkan LIMIT pada DELETE, sehingga hanya sejumlah baris tertentu yang akan dihapus. Berguna saat kamu mau hapus data secara bertahap (batching) untuk menghindari lock tabel di production.

DELETE FROM pesanan
WHERE status = 'dibatalkan'
LIMIT 1;

-- Hanya menghapus 1 baris pertama yang memenuhi kondisi
-- Output: Query OK, 1 row affected

๐Ÿงน Perintah TRUNCATE: Reset Total Isi Tabel

Kalau DELETE itu ibarat menghapus halaman tertentu dari buku catatan, maka TRUNCATE itu seperti langsung merobek semua halaman isinya — tapi bukunya (struktur tabel) tetap ada. TRUNCATE menghapus semua baris dalam tabel sekaligus, cepat, dan efisien. Cocok untuk skenario seperti mengosongkan tabel log sementara, data testing, atau cache yang perlu di-reset total.

๐Ÿ“‹ Sintaks TRUNCATE
TRUNCATE TABLE nama_tabel;

-- Keterangan:
-- TRUNCATE TABLE → perintah untuk mengosongkan tabel
-- nama_tabel    → tabel yang ingin dikosongkan
-- Tidak ada WHERE — semua baris terhapus!
-- AUTO_INCREMENT akan di-reset ke 1

Contoh: kita punya tabel keranjang_temp yang menyimpan data keranjang belanja sementara (session). Setiap hari, data ini perlu dikosongkan:

๐Ÿ“Š Data tabel keranjang_temp sebelum TRUNCATE:

id id_produk jumlah session_id
1P0012abc123
2P0051def456
3P0025ghi789
TRUNCATE TABLE keranjang_temp;

-- Seluruh isi tabel terhapus seketika
-- Output: Query OK, 0 rows affected (eksekusi super cepat!)
-- AUTO_INCREMENT id akan kembali mulai dari 1

๐Ÿ“Š Hasil setelah TRUNCATE:

id id_produk jumlah session_id
Tidak ada data (Empty set)
⚠️ Peringatan Penting

TRUNCATE tidak bisa di-rollback jika kamu tidak menggunakan transaksi (dan pada banyak storage engine, bahkan transaksi pun tidak membantu). Selain itu, TRUNCATE juga tidak bisa digunakan pada tabel yang memiliki foreign key constraint yang aktif. Kalau kamu mencoba TRUNCATE tabel induk yang direferensikan tabel lain, MySQL akan melempar error. Selalu cek relasi tabel sebelum TRUNCATE!

⚔️ DELETE vs TRUNCATE MySQL: Kapan Pakai yang Mana?

Pertanyaan paling sering muncul ketika belajar DELETE TRUNCATE MySQL adalah: "Kapan sih aku harus pilih DELETE dan kapan pakai TRUNCATE?" Jawabannya tergantung skenario. Mari kita bedah perbedaan keduanya secara lengkap dalam tabel perbandingan berikut.

Aspek DELETE TRUNCATE
Jenis Perintah DML (Data Manipulation Language) DDL (Data Definition Language)
Filter Kondisi ✅ Bisa dengan WHERE ❌ Tidak ada WHERE
Kecepatan ๐Ÿข Lebih lambat (row by row) ๐Ÿš€ Sangat cepat (drop & recreate)
ROLLBACK ✅ Bisa di-rollback dalam transaksi ⚠️ Umumnya tidak bisa di-rollback
AUTO_INCREMENT Tidak di-reset (lanjut dari terakhir) Di-reset ke 1
Trigger ✅ Mengaktifkan DELETE trigger ❌ Tidak mengaktifkan trigger
Foreign Key Diperiksa per baris Error jika ada FK aktif
Penggunaan Ideal Hapus sebagian data spesifik Kosongkan tabel sepenuhnya
Log Transaksi Dicatat tiap baris Minimal (lebih hemat log)

๐Ÿ›’ Studi Kasus Toko Online: Praktik Nyata DELETE & TRUNCATE

Sekarang kita masuk ke skenario nyata. Bayangkan kamu adalah developer yang membangun sistem manajemen toko online. Ada beberapa situasi yang memerlukan operasi penghapusan data. Mari kita selesaikan satu per satu.

Skenario 1: Hapus produk yang sudah tidak dijual

-- Hapus produk dengan stok 0 dan status tidak aktif
DELETE FROM produk
WHERE stok = 0 AND status = 'nonaktif';

-- Output: Query OK, 3 rows affected

Skenario 2: Hapus pelanggan yang belum terverifikasi lebih dari 30 hari

-- Hapus akun pelanggan belum verifikasi lebih dari 30 hari
DELETE FROM pelanggan
WHERE is_verified = 0
  AND tgl_daftar < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Output: Query OK, 7 rows affected

Skenario 3: Reset tabel log aktivitas harian

-- Reset total tabel log harian (jalankan tiap tengah malam)
TRUNCATE TABLE log_aktivitas_harian;

-- Lebih cepat dari DELETE, ID mulai dari 1 lagi besok
-- Output: Query OK, 0 rows affected
⚠️ Jangan Lakukan Ini!

DELETE FROM pelanggan; tanpa WHERE akan menghapus semua pelanggan dalam satu perintah. Ini adalah salah satu kesalahan paling fatal yang bisa terjadi di production. Selalu pastikan klausa WHERE ada sebelum eksekusi, atau gunakan TRUNCATE jika memang niat mengosongkan tabel.

๐Ÿ“‹ Step-by-Step: Praktikum DELETE & TRUNCATE

1

Buat database dan tabel latihan

CREATE DATABASE toko_latihan;
USE toko_latihan;

CREATE TABLE produk (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(100),
  stok INT,
  status ENUM('aktif','nonaktif')
);
2

Isi tabel dengan data contoh

INSERT INTO produk (nama, stok, status) VALUES
('Kaos Polos', 50, 'aktif'),
('Sepatu Lama', 0, 'nonaktif'),
('Topi Bucket', 30, 'aktif'),
('Tas Rusak', 0, 'nonaktif');
3

Preview dulu dengan SELECT

-- Selalu preview sebelum hapus!
SELECT * FROM produk
WHERE stok = 0 AND status = 'nonaktif';
4

Eksekusi DELETE dengan kondisi

DELETE FROM produk
WHERE stok = 0 AND status = 'nonaktif';

-- Verifikasi hasil
SELECT * FROM produk;
5

Coba TRUNCATE dan lihat perbedaan AUTO_INCREMENT

TRUNCATE TABLE produk;

-- Insert ulang dan lihat id mulai dari 1 lagi
INSERT INTO produk (nama, stok, status)
VALUES ('Produk Baru', 100, 'aktif');

SELECT * FROM produk;
-- id akan bernilai 1, bukan 5 atau 6!
✅ Tips dari Trainer Lapangan #1

Di production, selalu bungkus operasi DELETE dengan transaksi (BEGIN / COMMIT / ROLLBACK). Jika sesuatu berjalan tidak sesuai harapan, kamu bisa rollback sebelum COMMIT. Ini adalah jaring pengaman yang akan kamu syukuri suatu hari nanti. Contoh: BEGIN; DELETE FROM ... WHERE ...; SELECT ROW_COUNT(); ROLLBACK; — jalankan SELECT dulu untuk cek jumlah baris yang terdampak, baru COMMIT kalau sudah yakin.

๐Ÿ’œ Tips dari Trainer Lapangan #2

Untuk tabel besar (jutaan baris), hindari DELETE atau TRUNCATE langsung di jam sibuk. Gunakan strategi "soft delete" — tambahkan kolom is_deleted TINYINT DEFAULT 0 dan tandai baris sebagai dihapus tanpa benar-benar menghapusnya. Penghapusan fisik bisa dijadwalkan via cron job di luar jam operasional. Pendekatan ini banyak dipakai di sistem e-commerce skala besar.

๐ŸŽฏ Kesimpulan

  • DELETE menghapus baris spesifik menggunakan klausa WHERE — cocok untuk penghapusan selektif dan bisa di-rollback.
  • TRUNCATE mengosongkan seluruh isi tabel sekaligus, sangat cepat, dan me-reset AUTO_INCREMENT.
  • DELETE adalah perintah DML, sedangkan TRUNCATE adalah DDL — perbedaan ini penting untuk memahami perilaku transaksi keduanya.
  • Selalu preview dengan SELECT sebelum DELETE untuk memastikan data yang akan dihapus sudah benar.
  • TRUNCATE tidak bisa digunakan pada tabel dengan foreign key constraint yang aktif.
  • Gunakan transaksi sebagai jaring pengaman pada operasi DELETE di environment production.

Menguasai DELETE TRUNCATE MySQL adalah bagian penting dari menjadi developer yang tidak hanya bisa menulis data, tapi juga tahu cara mengelola "kebersihan" database. Ingat, data yang tidak dikelola dengan baik adalah utang teknis yang akan menyusahkan masa depan. Jadi, hapuslah dengan bijak! ๐Ÿ’ช

๐Ÿ“– Artikel Selanjutnya dalam Seri

Artikel 18/28: Transaksi MySQL — BEGIN, COMMIT, dan ROLLBACK

Pelajari bagaimana MySQL mengelompokkan beberapa operasi SQL menjadi satu unit kerja yang aman — dan bagaimana membatalkannya jika terjadi kesalahan di tengah jalan.

Baca Artikel 18 →
#MySQL #SQL #Database #Query #Tutorial #DELETE TRUNCATE MySQL

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux