UPDATE & DELETE: Mengubah dan Menghapus Data dengan Aman

UPDATE dan DELETE dengan WHERE, bahaya lupa WHERE, kebiasaan aman (SELECT dulu, transaksi), RETURNING, serta beda DELETE, TRUNCATE, dan DROP.

Part 10 dari 25 ± 35 menit Gratis

Analogi: UPDATE dan DELETE itu seperti penghapus dan spidol besar di papan tulis. Tanpa WHERE, kamu menghapus atau menimpa seluruh papan, bukan satu kalimat. Tidak ada tombol "undo" kecuali kamu sempat membuat transaksi atau cadangan.

UPDATE: mengubah data yang sudah ada

UPDATE nama_tabel
SET kolom1 = nilai1, kolom2 = nilai2
WHERE syarat;
UPDATE buku SET stok = 100 WHERE judul = 'Negeri 5 Menara';
UPDATE buku SET harga = harga * 110 / 100 WHERE kategori_id = 2;   -- naik 10% untuk komik

Di sisi kanan = kamu boleh memakai kolom itu sendiri (harga * 110 / 100) untuk menghitung nilai baru dari nilai lama.

BAHAYA: lupa WHERE! UPDATE buku SET harga = 0; mengubah semua baris di tabel. Begitu pula DELETE FROM buku; menghapus seluruh isi tabel. Tidak ada tombol Undo (kecuali kamu di dalam transaksi).

DELETE: menghapus baris

DELETE FROM buku WHERE kategori_id IS NULL;     -- hapus buku tanpa kategori

Tiga kebiasaan anti-kecelakaan

  1. SELECT dulu: jalankan SELECT * FROM buku WHERE kategori_id IS NULL; untuk melihat baris yang akan terkena, baru ganti SELECT * menjadi DELETE.
  2. Gunakan transaksi untuk perubahan berisiko:
    BEGIN;
    DELETE FROM buku WHERE tahun < 1990;
    SELECT * FROM buku;      -- periksa hasilnya
    ROLLBACK;                -- salah? batalkan.  (atau COMMIT; kalau sudah yakin)
  3. Pakai RETURNING untuk melihat apa yang berubah.

RETURNING pada UPDATE dan DELETE

UPDATE buku SET stok = stok + 10 WHERE id = 3 RETURNING id, judul, stok;
DELETE FROM buku WHERE id = 12 RETURNING *;

Postgres langsung menampilkan baris hasil perubahan/penghapusan tanpa SELECT tambahan.

Tiga cara "menghapus", tiga makna berbeda

PerintahYang terjadiBisa di-rollback?
DELETE FROM t WHERE ...Hapus baris tertentuYa (dalam transaksi)
TRUNCATE TABLE tKosongkan seluruh isi tabel dengan cepat; tabel tetap adaYa di PostgreSQL (dalam transaksi)
DROP TABLE tHapus tabelnya sekaligus isinyaYa di PostgreSQL (dalam transaksi), tapi jangan diandalkan

Aturan jari: sebelum menekan Enter pada UPDATE/DELETE, baca ulang perintahmu dan pastikan ada WHERE. Kebiasaan 3 detik ini menyelamatkan banyak karier.

Foreign key dan DELETE

Kalau baris yang kamu hapus masih dirujuk tabel lain (misalnya pelanggan yang punya pesanan), Postgres menolak dengan error foreign key. Itu bukan bug: itu constraint yang melindungimu. Kita bahas di bab Relasi.

Kasus nyata: salah ketik yang menghapus semua data

Kasus klasik yang pernah menimpa banyak perusahaan: developer ingin menaikkan harga satu buku, tetapi lupa WHERE, sehingga semua buku berharga sama. Kebiasaan aman para profesional:

-- 1. Pratinjau dulu dengan SELECT yang WHERE-nya sama
SELECT * FROM buku WHERE id = 3;
-- 2. Baru jalankan UPDATE dengan WHERE yang sama
UPDATE buku SET harga = 85000 WHERE id = 3 RETURNING id, judul, harga;

Kesalahan yang sering terjadi

  • Menjalankan UPDATE/DELETE tanpa WHERE. Biasakan menulis WHERE dulu.
  • Menghapus baris yang masih dipakai tabel lain. Foreign key akan menolaknya (itu bagus); jangan mematikan constraint demi "cepat".
  • Tidak memakai RETURNING untuk memastikan baris mana yang berubah.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X