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 2 dari 14

Atomisitas dan perubahan data terkait

Transaksi: semua atau tidak sama sekali

Setelah pelajaran ini kamu bisa menjelaskan empat sifat ACID dari sumbernya, membungkus beberapa perubahan dengan BEGIN, COMMIT, dan ROLLBACK, dan membedakan atomisitas satu pernyataan dari atomisitas transaksi.

±13 menitDiperiksa 7 Okt 2026

Materi

Transaksi adalah sekelompok perubahan yang diperlakukan basis data sebagai satu kesatuan. Halaman SQLite tentang transaksi menyebut empat sifatnya dengan singkatan ACID: atomic, consistent, isolated, dan durable. SQLite menegaskan bahwa semua perubahan dalam satu transaksi terjadi seluruhnya atau tidak sama sekali, bahkan bila penulisan ke disk terputus oleh program yang crash, sistem operasi yang crash, atau listrik padam. Tutorial PostgreSQL memakai contoh transfer bank: pengurangan saldo satu rekening dan penambahan saldo rekening lain harus terjadi bersama.

SifatArtinyaContoh di koperasi
AtomicitySemua perubahan dalam transaksi terjadi, atau tidak satu punSaldo pengirim tidak berkurang bila saldo penerima gagal ditambah
ConsistencyYang tersimpan hanya keadaan yang memenuhi semua constraintCHECK (saldo >= 0) tidak pernah dilanggar data yang tersimpan
IsolationPerubahan yang belum di-commit tidak terlihat dari koneksi lainLaporan total saldo tidak melihat transfer yang baru separuh
DurabilitySesudah COMMIT berhasil, perubahan tetap ada walau terjadi crashSetoran yang sudah dikonfirmasi tidak hilang saat listrik padam

Di SQL, transaksi dibuka dengan BEGIN, disimpan dengan COMMIT, dan dibatalkan dengan ROLLBACK. Tanpa BEGIN, SQLite membungkus setiap pernyataan dalam transaksi otomatisnya sendiri. Koneksi Python yang dibuka dengan isolation_level=None tidak menambahkan perintah apa pun, jadi ketiganya ditulis sendiri lewat conn.execute().

conn.execute("BEGIN")
try:
    conn.execute("UPDATE gudang SET stok = stok - 5 WHERE id = 1")
    conn.execute("UPDATE gudang SET stok = stok + 5 WHERE id = 2")
except Exception:
    conn.execute("ROLLBACK")
    raise
conn.execute("COMMIT")

Satu pernyataan juga atomik terhadap dirinya sendiri. Dengan algoritma konflik bawaan ABORT, pernyataan yang melanggar constraint dibatalkan seluruhnya, termasuk baris yang sempat diubahnya, tetapi perubahan dari pernyataan sebelumnya dalam transaksi yang sama tetap ada dan transaksinya tetap terbuka. Jadi galat tidak otomatis membatalkan transaksi; kodemu yang memutuskan ROLLBACK.

Latihan

0/3 lulus

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

Latihan 1 dari 3

Kasir koperasi menekan Simpan. Aplikasi menampilkan "Setoran tercatat" setelah COMMIT berhasil, lalu listrik padam. Saat komputer menyala lagi, setoran itu tetap ada. Sifat ACID mana yang menjamin hal ini?

Pilih satu jawaban

Latihan 3 dari 3

Kolom kode di tabel anggota bersifat UNIQUE dan tabelnya masih kosong. Koneksi dibuka dengan isolation_level=None. Berapa baris yang tersimpan setelah kode ini selesai?

conn.execute("BEGIN")
conn.execute("INSERT INTO anggota(kode, nama) VALUES ('A-001', 'Rina')")
try:
    conn.execute("INSERT INTO anggota(kode, nama) VALUES ('A-001', 'Rudi')")
except sqlite3.IntegrityError:
    pass
conn.execute("COMMIT")
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke