Belajar dengan membaca secara berurutan

UPDATE dan DELETE — Memperbarui dan Menghapus Baris

Pelajari SQL UPDATE dan DELETE dari dasar. Mencakup pembaruan banyak kolom dengan SET, penghapusan terbatas dengan WHERE, dan apa yang terjadi kalau kamu lupa WHERE — semuanya berjalan langsung di browser kamu.

UPDATE — menulis ulang baris yang sudah ada

INSERT untuk "menambahkan baris baru." UPDATE adalah operasi untuk menulis ulang nilai baris yang sudah ada. Mengubah status anggota, merevisi harga produk, memperbarui jumlah pembelian — UPDATE adalah bagian dari operasi sehari-hari di setiap aplikasi produksi.

Bentuk dasarnya adalah UPDATE nama_tabel SET col = val WHERE kondisi;. SET mengatakan "kolom mana mendapat nilai apa," dan WHERE mengatakan "baris mana yang terpengaruh."

-- Tulis ulang status customer di mana id = 1 menjadi 'active'
UPDATE customer SET status = 'active' WHERE id = 1;

-- Periksa hasilnya
SELECT * FROM customer;
Struktur pernyataan UPDATE
UPDATE tabelSET col = valWHERE kondisiTabel targetcustomerPerubahanstatus = 'active'Baris targetid = 1Tabel targetTulis ulang kolomPersempit baris
UPDATE nama_tabel adalah tabel target, SET col = val adalah perubahannya, dan WHERE kondisi mempersempit baris mana. Rasakan posisi dan peran masing-masing.

Lupa WHERE memperbarui setiap baris

Hilangkan WHERE dari UPDATE customer SET status = 'active' WHERE id = 1; (menjadi UPDATE customer SET status = 'active';) dan setiap baris dari customer akan di-rewrite status-nya menjadi 'active'. Tidak ada error, dan justru itu yang membuatnya jadi cara mudah merusak data produksi diam-diam.

Bayangkan membalikkan satu pelanggan (Alice) dari pending menjadi active. (Jalankan dengan benar dan penjelasannya akan muncul.)

① Pertama jalankan SELECT name, status FROM customer WHERE id = 1; dan pastikan status Alice adalah 'pending' (belum aktif).

② Update kolom status menjadi 'active' untuk baris di customer di mana `id = 1` (Alice).

③ Akhiri dengan SELECT * FROM customer; dan pastikan hanya status Alice yang berubah menjadi 'active', sementara Bob dan Carol tidak berubah.

(WHERE di sini memakai sintaks penyaringan yang sama yang kamu lihat di artikel SELECT.)

SQL Editor

Jalankan query untuk melihat hasil

Memperbarui banyak kolom sekaligus

Dengan mendaftar pasangan `col = val` dipisah koma di klausa SET, kamu bisa memperbarui banyak kolom sekaligus: SET col1 = val1, col2 = val2, ....

Sisi kanan juga bisa berupa ekspresi yang melibatkan kolom itu sendiri. SET price = price + 100 artinya "tulis ulang price baris target menjadi price-nya saat ini ditambah 100."

Variasi klausa SET
Kolom tunggalSET status = 'active'Banyak kolom(dipisah koma)SET price = 200, stock = 100Ekspresi(merujuk dirinya sendiri)SET price = price + 100KombinasiSET price = price + 100, stock = stock - 10
SET bisa menampung satu pasangan col = val atau beberapa yang dipisah koma, dan sisi kanan juga bisa berupa ekspresi.
-- Update banyak kolom ke nilai absolut sekaligus
UPDATE inventory SET price = 200, stock = 100 WHERE id = 2;

-- Update dengan ekspresi (merujuk nilai yang sudah ada)
UPDATE inventory SET price = price + 100, stock = stock - 10 WHERE id = 2;

Bayangkan layar inventaris di mana kamu ingin merevisi harga dan jumlah stok penghapus.

① Untuk baris di inventory di mana `id = 2` (Penghapus), update price menjadi 200 dan stock menjadi 100 secara bersamaan.

② Akhiri dengan SELECT * FROM inventory; dan pastikan hanya id=2 yang diperbarui ke nilai baru, sementara id=1 (Pensil) dan id=3 (Buku Tulis) tidak berubah.

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan: "naikkan harga pensil (id=1) sebanyak 100 dan kurangi stoknya 10." Menaruh ekspresi yang merujuk kolom itu sendiri di sisi kanan SET membuatmu bisa mengubah relatif terhadap nilai saat ini.

① Untuk baris di inventory di mana `id = 1` (Pensil), update kedua kolom sekaligus dengan `price = price + 100` dan `stock = stock - 10`.

② Akhiri dengan SELECT * FROM inventory WHERE id = 1; dan pastikan price pensil adalah 180 dan stock adalah 190.

SQL Editor

Jalankan query untuk melihat hasil

DELETE — menghapus baris

DELETE adalah operasi untuk menghapus baris dari tabel. Bentuk dasarnya adalah DELETE FROM nama_tabel WHERE kondisi;, dengan WHERE mempersempit baris target. Tidak seperti SELECT, tidak ada daftar kolom (SELECT col1, col2) — DELETE menghapus seluruh baris.

Definisi tabel (struktur kolom) tetap ada, jadi kamu bisa INSERT ke tabel yang sama setelah menghapus. Untuk menghapus tabelnya sendiri, pakai DROP TABLE / TRUNCATE (dibahas di artikel berikutnya).

Struktur pernyataan DELETE
DELETE FROM tabelWHERE kondisiTabel targetsubscriptionBaris yang dihapusstatus = 'expired'Tabel targetPersempit baris
DELETE FROM nama_tabel adalah tabel target; WHERE kondisi memutuskan baris mana yang dihapus. Tidak ada padanan daftar kolom SELECT atau klausa SET UPDATE di DELETE.
-- Hapus semua langganan kedaluwarsa (status = 'expired')
DELETE FROM subscription WHERE status = 'expired';

-- Periksa hasilnya (hanya baris yang bertahan yang tetap)
SELECT * FROM subscription;

Bayangkan membersihkan langganan kedaluwarsa secara massal.

① Dari subscription, hapus setiap baris di mana `status` adalah `'expired'`.

② Akhiri dengan SELECT * FROM subscription; dan pastikan satu-satunya yang tersisa adalah 2 baris di mana status = 'active' (Bob / Dave).

(Setiap baris yang cocok dengan kondisi WHERE menjadi target — tanpa menentukan id, banyak baris yang cocok hilang sekaligus.)

SQL Editor

Jalankan query untuk melihat hasil

Hati-hati dengan WHERE yang hilang — jebakan update/delete semua baris

Lupa WHERE adalah kecelakaan paling umum dengan UPDATE dan DELETE. Tanpa WHERE, sintaksnya tetap legal — dan target meluas ke setiap baris di tabel. UPDATE tabel SET col = val; menulis ulang setiap baris ke nilai yang sama; DELETE FROM tabel; mengosongkan tabel.

Walau kamu langsung menyadarinya, kamu tidak bisa membatalkan setelah perubahan di-commit. Aturan operasional dasar di produksi adalah selalu menjalankan WHERE yang sama sebagai `SELECT` dulu untuk memastikan baris target secara visual sebelum menulis ulang.

Dengan WHERE vs tanpa WHERE
DELETE FROM cache_entry WHERE id = 1;→ Hanya menghapus id=1(aman — dipersempit oleh WHERE)DELETE FROM cache_entry;→ Setiap baris dihapus(tabel menjadi kosong)UPDATE customer SET status = 'active' WHERE id = 1;→ Hanya memperbarui id=1(pelanggan lain tidak berubah)UPDATE customer SET status = 'active';→ Setiap status baris jadi 'active'(setiap pelanggan menjadi active)
Hanya ada atau tidaknya WHERE membalikkan operasi antara "bertindak pada satu baris yang ditargetkan" dan "bertindak pada setiap baris sekaligus." Radius dampak melupakannya adalah, secara harfiah, seluruh tabel.

Di produksi, pastikan baris target dengan SELECT lebih dulu

Untuk UPDATE / DELETE di database produksi, jalankan WHERE yang sama sebagai SELECT lebih dulu dan pastikan baris target sesuai harapan secara visual sebelum menukarnya menjadi operasi rewrite. Prosedur dua langkahnya:

1. Jalankan SELECT * FROM nama_tabel WHERE kondisi; untuk memastikan baris target (apakah jumlah baris dan nilainya sesuai harapan?)

2. Kalau semuanya terlihat benar, ganti WHERE yang sama menjadi UPDATE nama_tabel SET col = val WHERE kondisi; atau DELETE FROM nama_tabel WHERE kondisi; dan jalankan

Karena klausa WHERE dipakai ulang lewat copy-paste, ini juga mengurangi jenis kecelakaan di mana WHERE-nya tidak sengaja terhapus saat penulisan ulang.

Bayangkan: "bersihkan cache dan bangun ulang dari awal." Tabel cache_entry mulai artikel dengan 3 baris cache di dalamnya.

Tanpa menulis WHERE, jalankan DELETE yang menghapus setiap baris dari cache_entry.

② Akhiri dengan SELECT * FROM cache_entry; dan pastikan hasilnya 0 baris (tabel kosong).

(DELETE tanpa WHERE adalah resep kecelakaan di produksi — di sini sengaja dijadikan latihan terakhir supaya kamu bisa merasakan perilakunya langsung.)

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Mana yang menggambarkan peran SET dan WHERE di pernyataan UPDATE dengan benar?

Soal 2Mana cara yang benar untuk memperbarui baik name maupun email untuk baris di customer di mana id = 1 secara bersamaan?

Soal 3Apa yang terjadi saat kamu menjalankan DELETE FROM product; tanpa WHERE?