Bayangkan kamu punya buku catatan harga produk di toko online-mu, dan tiba-tiba ada diskon besar-besaran. Masa kamu harus hapus semua data lama terus isi ulang dari awal? Tentu tidak! Di sinilah keajaiban UPDATE SET MySQL bekerja — perintah yang memungkinkan kamu mengubah data yang sudah ada tanpa perlu menghapus dan mengisi ulang satu per satu.
Selamat datang di Artikel ke-16 dari 28 Seri Belajar Query SQL MySQL! Di sini kita akan bahas tuntas cara pakai perintah UPDATE dan SET — dua sahabat karib yang jadi andalan setiap developer database.
Di artikel ini kamu akan belajar: sintaks dasar UPDATE SET, cara update satu atau banyak kolom sekaligus, update dengan kondisi WHERE, teknik update banyak baris, dan jebakan-jebakan berbahaya yang wajib dihindari. Studi kasus menggunakan database toko online — produk, pelanggan, dan pesanan — supaya lebih relate dengan dunia nyata. Langsung gas!
Fakta Menarik tentang Perintah UPDATE!
Menurut survei Stack Overflow Developer Survey, operasi UPDATE adalah salah satu dari 3 perintah SQL yang paling sering digunakan dalam aplikasi produksi. Di platform e-commerce besar, ribuan query UPDATE dieksekusi setiap detik — mulai dari update stok produk, status pesanan, hingga poin reward pelanggan. Bayangkan: satu bug pada perintah UPDATE tanpa WHERE bisa mengubah seluruh data dalam tabel sekaligus!
1. Mengenal Sintaks Dasar UPDATE SET MySQL
Kalau INSERT itu seperti menulis entri baru di buku catatan, maka UPDATE SET MySQL adalah seperti menghapus tulisan dengan penghapus dan menulis ulang di tempat yang sama. Data lamanya pergi, digantikan data baru — tapi baris-nya tetap ada di tempat yang sama.
📋 Sintaks Lengkap UPDATE SET
UPDATE nama_tabel SET kolom1 = nilai_baru1, -- kolom yang ingin diubah kolom2 = nilai_baru2, -- bisa update banyak kolom sekaligus kolom3 = nilai_baru3 WHERE kondisi; -- ⚠️ WAJIB! tanpa ini semua baris berubah!
Mari langsung praktik. Misalkan kita punya tabel produk di toko online kita seperti ini:
| id_produk | nama_produk | harga | stok | kategori |
|---|---|---|---|---|
| 1 | Sepatu Lari Nike | 850000 | 50 | Olahraga |
| 2 | Kaos Polos Hitam | 120000 | 200 | Fashion |
| 3 | Laptop Asus VivoBook | 7500000 | 15 | Elektronik |
| 4 | Tas Ransel Canvas | 275000 | 80 | Aksesoris |
Sekarang kita mau update harga Sepatu Lari Nike dari 850.000 menjadi 799.000 (lagi diskon!):
UPDATE produk SET harga = 799000 WHERE id_produk = 1;
Output MySQL: Query OK, 1 row affected
💡 Tip Praktis
Sebelum eksekusi UPDATE, coba jalankan dulu query SELECT * FROM produk WHERE id_produk = 1 untuk memastikan kamu menyasar baris yang tepat. Ini kebiasaan developer pro yang sering diabaikan pemula!
2. UPDATE SET MySQL untuk Banyak Kolom Sekaligus
Analoginya begini: kalau kamu mau renovasi kamar, lebih efisien ganti cat tembok, ganti karpet, DAN ganti lampu sekaligus dalam satu hari kerja — bukan tiga hari kerja terpisah. Begitu juga di MySQL, kamu bisa update beberapa kolom sekaligus dalam satu perintah UPDATE SET dengan memisahkan setiap pasangan kolom-nilai menggunakan tanda koma.
📝 Update Harga + Stok Laptop Sekaligus
UPDATE produk SET harga = 6999000, -- turunkan harga stok = 20, -- tambah stok kategori = 'Komputer' -- ubah kategori WHERE id_produk = 3;
Hasil setelah query dieksekusi:
| id_produk | nama_produk | harga | stok | kategori |
|---|---|---|---|---|
| 3 | Laptop Asus VivoBook | 6999000 ✓ | 20 ✓ | Komputer ✓ |
Bonus keren: di kolom SET, kamu bisa pakai ekspresi matematika! Misalnya, kamu mau kurangi stok Kaos Polos saat ada order masuk:
-- Kurangi stok 5 unit saat ada pesanan UPDATE produk SET stok = stok - 5 -- nilai lama dikurangi 5 WHERE id_produk = 2; -- Naikkan harga semua produk Fashion 10% UPDATE produk SET harga = harga * 1.10 WHERE kategori = 'Fashion';
⚠️ Peringatan Penting!
Saat update menggunakan ekspresi seperti stok = stok - 5, pastikan nilai stok tidak akan menjadi negatif! Tambahkan kondisi AND stok >= 5 di klausa WHERE untuk mencegah stok minus.
3. UPDATE SET dengan Kondisi WHERE yang Lebih Kompleks
Klausa WHERE di perintah UPDATE SET MySQL bisa sekompleks kondisi pada query SELECT — bisa pakai AND, OR, IN, BETWEEN, bahkan subquery! Anggap aja WHERE itu seperti filter di aplikasi e-commerce — kamu bisa makin spesifik milih produk yang mau diubah.
Beberapa contoh kondisi WHERE yang sering dipakai di kasus toko online:
-- 1. Update status pesanan dengan IN UPDATE pesanan SET status = 'Dikirim' WHERE id_pesanan IN (101, 102, 105, 110); -- 2. Update poin pelanggan yang belanja bulan ini UPDATE pelanggan SET poin = poin + 100 WHERE tanggal_daftar BETWEEN '2024-01-01' AND '2024-01-31'; -- 3. Update stok yang hampir habis (< 10) dan mahal (> 1jt) UPDATE produk SET stok = stok + 50 WHERE stok < 10 AND harga > 1000000; -- 4. Update menggunakan LIKE untuk nama produk tertentu UPDATE produk SET kategori = 'Sport & Lifestyle' WHERE nama_produk LIKE '%Nike%' OR nama_produk LIKE '%Adidas%';
Contoh: Update status pesanan tabel pesanan:
| id_pesanan | id_pelanggan | total | status (sebelum) | status (sesudah) |
|---|---|---|---|---|
| 101 | C001 | 850.000 | Diproses | Dikirim ✓ |
| 102 | C003 | 120.000 | Diproses | Dikirim ✓ |
| 103 | C002 | 275.000 | Pending | Pending (tidak berubah) |
💡 Tip Praktis — Safe Update Mode
MySQL punya fitur safe update mode. Kalau kamu dapat error "Error Code: 1175", itu tandanya MySQL memproteksi kamu dari UPDATE tanpa primary key di WHERE. Bisa dinonaktifkan sementara dengan: SET SQL_SAFE_UPDATES = 0; — tapi gunakan dengan bijak ya!
4. Jebakan Berbahaya: UPDATE Tanpa WHERE dan Cara Mitigasinya
Ini bagian yang wajib dihapal sampai mimpi. Coba bayangkan kamu bekerja di tim dev startup, jam 11 malam, lagi buru-buru deploy hotfix — terus tanpa sadar kamu eksekusi:
🚨 QUERY MEMATIKAN — JANGAN DIJALANKAN DI PRODUCTION!
UPDATE produk SET harga = 0; -- ☠️ Tanpa WHERE = SEMUA produk harganya jadi 0! -- Toko online kamu barusan rugi miliaran rupiah.
Untuk mencegah skenario horor itu, ada beberapa strategi yang bisa kamu terapkan:
-- STRATEGI 1: Selalu gunakan transaction START TRANSACTION; UPDATE produk SET harga = 0; -- oh tidak! ROLLBACK; -- data kembali seperti semula, selamat! -- STRATEGI 2: SELECT dulu sebelum UPDATE -- Pastikan WHERE-mu sudah benar SELECT * FROM produk WHERE kategori = 'Elektronik'; -- Baru setelah yakin, jalankan UPDATE UPDATE produk SET harga = harga * 0.9 WHERE kategori = 'Elektronik'; -- STRATEGI 3: Gunakan LIMIT untuk batasi jumlah baris UPDATE produk SET stok = 0 WHERE kategori = 'Elektronik' LIMIT 1; -- hanya 1 baris yang berubah, aman!
🔥 Insight dari Lapangan
Senior developer biasanya punya SOP ketat: setiap query UPDATE di production harus dibungkus dalam transaction, dan wajib ada peer review sebelum dieksekusi. Kebiasaan ini menghemat ribuan jam kerja perbaikan data yang corrupt. Mulai terapkan dari sekarang, meski untuk project kecil!
🛠️ Step-by-Step: Praktikum UPDATE di Toko Online
Buat tabel dan isi data awal
Siapkan tabel produk dengan beberapa baris data sample menggunakan INSERT.
CREATE TABLE produk ( id_produk INT PRIMARY KEY AUTO_INCREMENT, nama_produk VARCHAR(100), harga DECIMAL(12,2), stok INT, kategori VARCHAR(50) );
Verifikasi data dengan SELECT sebelum UPDATE
Kebiasaan terpenting: lihat data dulu dengan SELECT menggunakan WHERE yang sama yang akan kamu pakai di UPDATE.
SELECT * FROM produk WHERE id_produk = 1;
Bungkus dalam Transaction
Mulai transaction, eksekusi UPDATE, verifikasi hasilnya — baru COMMIT jika sudah yakin.
START TRANSACTION; UPDATE produk SET harga = 799000, stok = 45 WHERE id_produk = 1; -- Cek hasilnya dulu SELECT * FROM produk WHERE id_produk = 1; -- Kalau sudah benar, commit! COMMIT;
Update banyak baris sekaligus dengan CASE WHEN
Untuk update dengan nilai berbeda di tiap baris tanpa looping, gunakan ekspresi CASE WHEN dalam SET.
-- Update diskon berbeda per kategori UPDATE produk SET harga = CASE WHEN kategori = 'Elektronik' THEN harga * 0.85 WHEN kategori = 'Fashion' THEN harga * 0.90 WHEN kategori = 'Olahraga' THEN harga * 0.95 ELSE harga END;
Verifikasi akhir dan dokumentasi
Jalankan SELECT akhir untuk memastikan semua perubahan sesuai harapan. Catat query yang berhasil untuk referensi tim. Kamu berhasil! 🎉
📊 Ringkasan: Variasi Perintah UPDATE SET MySQL
💡 Tip #1: ROW_COUNT() untuk Audit
Setelah eksekusi UPDATE, panggil SELECT ROW_COUNT(); untuk tahu berapa baris yang benar-benar berubah. Kalau hasilnya 0 padahal kamu expect banyak baris — berarti ada yang salah di WHERE-mu!
🔥 Insight #2: UPDATE vs DELETE+INSERT
Pemula sering salah kaprah: hapus dulu lalu insert ulang. Itu 2x lebih lambat dan berbahaya (bisa kehilangan data jika INSERT gagal). Gunakan UPDATE — itu cara yang benar, lebih cepat, dan lebih aman karena bisa di-rollback.
🎯 Kesimpulan
- ✦ UPDATE SET MySQL adalah perintah untuk memperbarui data yang sudah ada di tabel tanpa menghapus barisnya.
- ✦ Klausa WHERE adalah WAJIB — tanpanya semua baris di tabel akan ikut berubah.
- ✦ Bisa update banyak kolom sekaligus dengan memisahkan pasangan kolom-nilai menggunakan koma di klausa SET.
-
✦
Gunakan ekspresi matematika di SET (seperti
stok = stok - 1) untuk update dinamis. - ✦ CASE WHEN dalam SET memungkinkan update nilai berbeda untuk baris yang berbeda dalam satu query.
- ★ Selalu gunakan TRANSACTION + ROLLBACK sebagai safety net, dan SELECT dulu sebelum UPDATE di production.
"Setiap developer handal pernah panik karena UPDATE tanpa WHERE. Bedanya, developer yang baik belajar dari kepanikan itu — dan kamu sudah selangkah lebih maju karena tahu risikonya sebelum mengalaminya."
Artikel Berikutnya — #17 dari 28
Menghapus Data: Perintah DELETE dan TRUNCATE
Setelah bisa update, saatnya belajar cara hapus data dengan aman dan kapan harus pilih DELETE vs TRUNCATE.
No comments:
Post a Comment