Properti ACID dan Anomali
Tinjau kembali atomisitas, konsistensi, isolasi, durabilitas, dan empat anomali klasik: pembacaan kotor, pembacaan tidak berulang, phantom, dan pembaruan yang hilang
Properti ACID dan Anomali adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
ACID
Sebuah transaksi dapat diandalkan jika bersifat:
- Atomik — semuanya berhasil atau tidak sama sekali
- Konsisten — memindahkan basis data dari satu keadaan valid ke keadaan valid lainnya
- Terisolasi — transaksi yang berjalan bersamaan tidak saling mengganggu
- Tahan lama — setelah di- COMMIT, data tetap ada meskipun terjadi kerusakan
Transaksi dalam SQL
Bungkus operasi dengan BEGIN ... COMMIT:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- If anything fails, ROLLBACK leaves both rows unchanged.Atomisitas dalam Praktik
Jika UPDATE kedua gagal, UPDATE pertama dibatalkan — uang tidak hilang di tengah proses:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Crash here, or ROLLBACK: account 1 is unchanged.Konsistensi
Constraint (NOT NULL, CHECK, FK) diperiksa saat COMMIT. Transaksi yang akan membuat basis data berada dalam keadaan tidak valid akan gagal:
BEGIN;
INSERT INTO orders (user_id, total) VALUES (999, 100); -- FK fails on commit if user 999 doesn't exist.
COMMIT;
-- ERROR: insert or update violates foreign key constraint
-- ROLLBACK happens automatically.Isolasi: Mengapa Penting
Dua transaksi yang berjalan bersamaan dapat merusak tampilan satu sama lain tanpa isolasi. Anomali klasik:
- Pembacaan kotor — membaca data yang belum di-COMMIT
- Pembacaan tidak berulang — query yang sama menghasilkan baris yang berbeda
- Baris semu — baris baru muncul di tengah transaksi
- Pembaruan yang hilang — dua pembaruan saling menimpa
Pembacaan Kotor
Membaca baris yang telah diubah oleh transaksi lain tetapi belum di-COMMIT. PostgreSQL mencegah hal ini pada semua tingkat isolasi.
Pembacaan Tidak Berulang
Anda membaca baris 1, transaksi lain melakukan COMMIT atas pembaruan pada baris 1, lalu Anda membacanya kembali — nilainya berbeda.
Pembacaan Baris Semu
Anda menjalankan SELECT COUNT(*) dua kali dalam satu transaksi. Di antara kedua pemanggilan tersebut, transaksi lain melakukan COMMIT atas sebuah INSERT — hasil hitungan kedua lebih besar.
Pembaruan yang Hilang
Dua transaksi sama-sama membaca balance=100, sama-sama menulis balance=balance-50, lalu sama-sama melakukan COMMIT — salah satu pengurangan -50 hilang.
Daya Tahan
Setelah COMMIT menghasilkan nilai, perubahan tersebut sudah tersimpan di disk (atau sudah direplikasi, bergantung pada pengaturan). Kerusakan yang terjadi satu milidetik kemudian tidak akan menghilangkannya. PostgreSQL mencapai daya tahan melalui WAL (pencatatan sebelum penulisan).
Komit Otomatis
Secara default, setiap pernyataan menjadi transaksinya sendiri:
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Implicitly: BEGIN; statement; COMMIT;SAVEPOINT
Pembatalan sebagian di dalam transaksi:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SAVEPOINT before_step2;
UPDATE accounts SET balance = balance + 100 WHERE id = 999;
-- ERROR — but we can recover:
ROLLBACK TO SAVEPOINT before_step2;
-- continue
COMMIT;Ringkasan
Transaksi adalah jaring pengaman bagi basis data relasional.
- ACID: atomik, konsisten, terisolasi, tahan lama
- Empat anomali klasik
- BEGIN ... COMMIT atau ROLLBACK
- SAVEPOINT untuk pembatalan sebagian
Pemeriksaan Singkat
Anomali apa yang terjadi ketika dua transaksi sama-sama membaca nilai yang sama, mengubahnya, lalu sama-sama melakukan COMMIT?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Properti ACID dan Anomali” gratis?
Ya — teks lengkap “Properti ACID dan Anomali” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Properti ACID dan Anomali”?
Tinjau kembali atomisitas, konsistensi, isolasi, durabilitas, dan empat anomali klasik: pembacaan kotor, pembacaan tidak berulang, phantom, dan pembaruan yang hilang Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Properti ACID dan Anomali” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Properti ACID dan Anomali
- Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
- Deadlock: Deteksi dan Pencegahan
- Penguncian Optimistis vs Pesimistis