Mengubah dan Merancang · Pelajaran 7 dari 9
INSERT, UPDATE, dan DELETE
9 menit baca · BelajarCode
1CREATE TABLE rekening (2 id INTEGER PRIMARY KEY,3 pemilik TEXT NOT NULL,4 saldo INTEGER NOT NULL CHECK (saldo >= 0)5);67INSERT INTO rekening (pemilik, saldo) VALUES ('Andi', 500000);8INSERT INTO rekening (pemilik, saldo) VALUES ('Bela', 250000), ('Citra', 100000);910UPDATE rekening SET saldo = saldo + 50000 WHERE pemilik = 'Citra';11DELETE FROM rekening WHERE saldo < 200000;1213SELECT * FROM rekening;id | pemilik | saldo 1 | Andi | 500000 2 | Bela | 250000
INSERT INTObisa menambah satu atau beberapa baris sekaligus.UPDATE ... SET ... WHEREmengubah baris yang memenuhi syarat. Saldo Citra menjadi 150000.DELETE FROM ... WHEREmenghapus baris yang memenuhi syarat. Citra terhapus karena saldonya di bawah 200000.
Selalu periksa WHERE sebelum UPDATE dan DELETE
UPDATE rekening SET saldo = 0; tanpa WHERE mengubah semua baris. DELETE FROM rekening; menghapus semua baris. Kebiasaan yang aman: jalankan dulu SELECT dengan WHERE yang sama untuk melihat baris mana yang akan terkena.
Transaksi
Memindahkan uang butuh dua perubahan: mengurangi saldo pengirim dan menambah saldo penerima. Keduanya harus berhasil bersama, atau gagal bersama. Transaksi menjamin hal itu.
1BEGIN;2UPDATE rekening SET saldo = saldo - 100000 WHERE pemilik = 'Andi';3UPDATE rekening SET saldo = saldo + 100000 WHERE pemilik = 'Bela';4COMMIT;56SELECT pemilik, saldo FROM rekening;pemilik | saldo Andi | 400000 Bela | 350000
BEGINmemulai transaksi.COMMITmenyimpan semua perubahan secara permanen.ROLLBACKmembatalkan semua perubahan sejakBEGIN, misalnya jika salah satu perintah gagal.
Sifat yang dijamin transaksi sering disingkat ACID: atomic (semua atau tidak sama sekali), consistent (aturan data tetap terpenuhi), isolated (transaksi tidak saling mengganggu), dan durable (yang sudah di-commit tidak hilang walaupun listrik padam).
Cek pemahaman
Apa akibat menjalankan DELETE FROM rekening; tanpa WHERE?
Latihan
Naikkan harga satu kategori
Buat tabel menu berisi nama, kategori, dan harga. Isi dengan beberapa menu, lalu naikkan harga semua minuman sebesar 10% dan tampilkan hasilnya.
Pembahasan
1CREATE TABLE menu (nama TEXT, kategori TEXT, harga INTEGER);2INSERT INTO menu VALUES3 ('Kopi susu', 'Minuman', 15000),4 ('Teh tarik', 'Minuman', 12000),5 ('Roti bakar', 'Makanan', 18000);67UPDATE menu SET harga = harga * 110 / 100 WHERE kategori = 'Minuman';89SELECT * FROM menu;nama | kategori | harga Kopi susu | Minuman | 16500 Teh tarik | Minuman | 13200 Roti bakar | Makanan | 18000
Sebelum UPDATE, jalankan SELECT * FROM menu WHERE kategori = 'Minuman'; untuk memastikan hanya minuman yang akan berubah.