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

Savepoint dan constraint

SAVEPOINT, RELEASE, dan ROLLBACK TO

Setelah pelajaran ini kamu bisa membatalkan sebagian transaksi dengan SAVEPOINT dan ROLLBACK TO, menutup savepoint dengan RELEASE, dan menelusuri tumpukan savepoint sampai COMMIT atau ROLLBACK.

±13 menitDiperiksa 7 Okt 2026

Materi

BEGIN…COMMIT tidak bisa bersarang, tetapi savepoint bisa. SAVEPOINT nama menaruh tanda di linimasa transaksi. ROLLBACK TO nama membatalkan semua perubahan sesudah tanda itu; tandanya tetap di tumpukan dan transaksinya tetap terbuka, jadi pekerjaan bisa dilanjutkan. RELEASE nama menghapus tanda itu beserta tanda yang dibuat sesudahnya, dan menggabungkan perubahannya ke transaksi induk. Halaman SQLite menggambarkannya persis begitu: SAVEPOINT membuat tanda, ROLLBACK TO memutar balik ke tanda itu, RELEASE menghapus tanda tanpa mengubah isi basis data.

Aturan tumpukannya: COMMIT menyimpan semua dan mengosongkan tumpukan; ROLLBACK tanpa TO membatalkan semua; nama yang tidak ada di tumpukan membuat ROLLBACK TO atau RELEASE gagal tanpa mengubah apa pun. Savepoint yang dibuka tanpa BEGIN memulai transaksinya sendiri, dan RELEASE atas savepoint terluar itu meng-commit. Di dalam BEGIN, RELEASE belum menyimpan apa pun ke disk: ROLLBACK di transaksi luar tetap membatalkannya.

conn.execute("BEGIN")
for nomor, nilai in setoran:
    conn.execute("SAVEPOINT baris")
    try:
        conn.execute("INSERT INTO kas(nomor, nilai) VALUES (?, ?)", (nomor, nilai))
        conn.execute("RELEASE baris")
    except sqlite3.IntegrityError:
        conn.execute("ROLLBACK TO baris")   # hanya baris ini yang batal
        conn.execute("RELEASE baris")
conn.execute("COMMIT")

Latihan

0/3 lulus

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

Latihan 1 dari 3

Tabel log masih kosong dan koneksi dibuka dengan isolation_level=None. Baris mana yang tersimpan?

BEGIN;
INSERT INTO log VALUES ('A');
SAVEPOINT s1;
INSERT INTO log VALUES ('B');
SAVEPOINT s2;
INSERT INTO log VALUES ('C');
ROLLBACK TO s1;
INSERT INTO log VALUES ('D');
COMMIT;
Pilih satu jawaban

Latihan 3 dari 3

Tabel log masih kosong dan koneksi dibuka dengan isolation_level=None. Apa isi tabel setelah kode ini?

BEGIN;
SAVEPOINT s;
INSERT INTO log VALUES ('X');
RELEASE s;
ROLLBACK;
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke