UPDATE mengganti isi kolom di baris yang sudah ada, dan DELETE membuang baris dari tabel. Bayangin buku nilai di meja guru. Mengganti nilai Rizky dari 85 jadi 90 itu UPDATE. Mencoret satu siswa yang pindah sekolah itu DELETE. Dan sebelum mencoret, guru harus tahu persis baris mana: itu tugas WHERE. Bedanya dengan buku, database gak bertanya "yakin?" dan gak punya tombol batal.
🧪 Tebakan cepat:
UPDATE students SET grade = 90;(tanpaWHERE) di tabel 4 siswa mengubah berapa baris? Tebak dulu, jawabannya ada di bagian "Tanpa WHERE: semua baris kena".
UPDATE: ganti nilai di baris yang dipilih
Tabel students di Lab dan latihan:
| id | name | grade | city |
|---|---|---|---|
| 1 | Dewi | 90 | Jakarta |
| 2 | Rizky | 85 | Bandung |
| 3 | Maya | 92 | Surabaya |
| 4 | Dimas | 82 | Semarang |
UPDATE students
SET grade = 90
WHERE name = 'Rizky';
SQLite melaporkan 1 baris berubah: grade Rizky sekarang 90, tiga baris lain tetap.
UPDATE studentsmemilih tabelnya.SET grade = 90menulis nilai baru ke kolomgrade. Mau mengubah beberapa kolom sekaligus? Pisahkan dengan koma:SET grade = 90, city = 'Bogor'.WHERE name = 'Rizky'memilih baris mana yang diubah, sama sepertiWHEREdiSELECT.- Teks ditulis dalam kutip tunggal:
'Rizky'. Angka tanpa kutip:90.
Nilai baru boleh dihitung dari nilai lama: SET grade = grade + 5 menambah 5 ke nilai yang sekarang.
DELETE: buang baris yang dipilih
DELETE FROM students
WHERE city = 'Semarang';
SQLite melaporkan 1 baris berubah: Dimas hilang, tabelnya tinggal 3 baris.
DELETE FROM studentsartinya "hapus dari tabelstudents". Gak ada daftar kolom dan gak ada*, karena yang dihapus selalu baris utuh.WHERE city = 'Semarang'memilih baris yang dihapus. Kalau ada dua siswa dari Semarang, keduanya terhapus.- Mau mengosongkan satu kolom saja, bukan barisnya? Itu
UPDATE ... SET kolom = NULL.
Tanpa WHERE: semua baris kena
UPDATE students SET grade = 90;
SQLite melaporkan 4 baris berubah: semua siswa sekarang bernilai 90. Itu jawaban tebakannya. Gak ada error, gak ada peringatan. DELETE FROM students; sama saja: tabelnya kosong, 0 baris.
Kebiasaan yang menyelamatkan: tulis dulu SELECT dengan WHERE yang sama, jalankan, cek baris yang muncul. Kalau sudah benar, baru ganti SELECT * jadi DELETE (atau tulis UPDATE dengan WHERE itu).
SELECT * FROM students WHERE city = 'Semarang'; -- 1 baris: Dimas
DELETE FROM students WHERE city = 'Semarang';
💡 Beda SQLite, MySQL, dan PostgreSQL
- Kutip ganda.
WHERE name = "Rizky"jalan di SQLite (dan MySQL dengan pengaturan bawaannya), karena SQLite menganggapnya teks kalau gak ada kolom bernama Rizky. PostgreSQL membaca kutip ganda sebagai nama kolom dan menolak:column "Rizky" does not exist. Biasakan kutip tunggal untuk teks. - Huruf besar-kecil. Di SQLite,
WHERE name = 'rizky'gak cocok denganRizky: 0 baris berubah, tanpa error. MySQL dengan pengaturan bawaannya mengabaikan besar-kecil huruf, jadi di sana cocok. - Pengaman. MySQL punya mode
sql_safe_updates(nyala di MySQL Workbench) yang menolakUPDATEatauDELETEtanpaWHEREpada kolom kunci. SQLite dan PostgreSQL langsung menjalankannya.
⚠️ Jebakan yang sering ketemu
- Lupa WHERE. Semua baris berubah atau terhapus. Cek angka "baris berubah" setiap kali: kalau lebih dari yang kamu kira, ada yang salah.
- Teks tanpa kutip.
WHERE name = Rizkydibaca sebagai nama kolom:no such column: Rizky. DELETE * FROM. Kebiasaan dariSELECT *. SQLite menolak:near "*": syntax error.- WHERE yang terlalu luas.
WHERE city = 'Jakarta'bisa kena lebih dari satu orang. Untuk tepat satu baris, pakai primary key:WHERE id = 2.
TL;DR: UPDATE tabel SET kolom = nilai WHERE syarat; mengganti nilai di baris yang cocok, DELETE FROM tabel WHERE syarat; membuang baris yang cocok. Tanpa WHERE, semua baris kena, tanpa error dan tanpa tombol batal. Teks pakai kutip tunggal. Cek dulu dengan SELECT ... WHERE yang sama, dan cek berapa baris yang berubah.