Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Transaksi Basis Data: Menjaga Data Tetap Konsisten

Pelajaran 1 dari 14

Atomisitas dan perubahan data terkait

Perubahan data yang saling bergantung

Setelah pelajaran ini kamu bisa mengubah data dengan INSERT, UPDATE, dan DELETE, membaca rowcount untuk mengetahui berapa baris yang berubah, menaruh syarat bisnis di WHERE, dan mengenali perubahan beberapa langkah yang bisa tertinggal setengah jalan.

±14 menitDiperiksa 7 Okt 2026

Materi

INSERT menambah baris, UPDATE mengubah kolom pada baris yang lolos syarat WHERE, dan DELETE menghapus baris yang lolos WHERE. Dokumentasi SQLite menegaskan bahwa UPDATE tanpa WHERE mengubah semua baris tabel, dan DELETE tanpa WHERE menghapus semuanya. Di Python, cursor.rowcount sesudah execute() berisi jumlah baris yang diubah oleh INSERT, UPDATE, DELETE, atau REPLACE. UPDATE yang tidak cocok dengan baris mana pun bukan galat: rowcount bernilai 0 dan program berjalan terus.

Satu kejadian bisnis jarang selesai dengan satu pernyataan. Penjualan mengurangi stok lalu mencatat nota; pengembalian buku menandai peminjaman selesai lalu menambah jumlah buku yang tersedia. Pada koneksi yang dibuka dengan isolation_level=None, SQLite membuka transaksi otomatis untuk setiap pernyataan dan meng-commit-nya begitu pernyataan itu selesai. Program yang berhenti di antara dua pernyataan, karena galat atau koneksi putus, meninggalkan data setengah jalan: stok sudah berkurang, notanya tidak pernah ada.

Syarat bisnis yang menyangkut satu baris bisa ditulis langsung di WHERE. Pengurangan di bawah hanya mengenai baris yang sisanya cukup, dan rowcount memberi tahu apakah syarat itu terpenuhi. Pemeriksaan dan perubahan terjadi dalam satu pernyataan, tanpa celah di antaranya.

cur = conn.execute(
    "UPDATE tiket SET sisa = sisa - ? WHERE kode = ? AND sisa >= ?",
    (2, "KRL-PAGI", 2),
)
if cur.rowcount == 0:
    print("Tiket tidak cukup atau kodenya tidak dikenal")

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Koneksi dibuka dengan isolation_level=None. Saldo awal rekening 1 Rp500.000 dan rekening 2 Rp150.000. Fungsi kirim_notifikasi() melempar ConnectionError. Apa isi tabel rekening setelah galat itu?

conn.execute("UPDATE rekening SET saldo = saldo - 100000 WHERE id = 1")
kirim_notifikasi()   # melempar ConnectionError
conn.execute("UPDATE rekening SET saldo = saldo + 100000 WHERE id = 2")
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke