Transaction
Transaction adalah sekelompok operasi database yang diperlakukan sebagai satu kesatuan - semua berhasil baru disimpan (COMMIT), atau kalau ada yang gagal semuanya dibatalkan (ROLLBACK). Ini jaminan supaya data kamu selalu dalam kondisi konsisten, nggak ada perubahan setengah jalan.
Apa Itu Transaction?
Transaction dalam konteks database adalah sekelompok satu atau lebih operasi SQL yang diperlakukan sebagai satu unit kerja yang tidak bisa dipecah. Artinya: semua operasi dalam satu transaction harus berhasil semuanya, atau kalau ada yang gagal, semuanya dibatalkan tanpa bekas.
Analogi paling klasik: transfer uang antar rekening bank. Prosesnya minimal dua langkah - kurangi saldo akun A, dan tambahkan ke akun B. Kalau langkah pertama berhasil tapi langkah kedua gagal karena sistem crash, kamu punya masalah serius: uang hilang dari A tapi nggak masuk ke B. Transaction memastikan hal kayak gitu nggak bisa terjadi.
COMMIT dan ROLLBACK
Dua perintah utama dalam transaction management:
COMMIT: Kamu menyetujui semua perubahan yang ada dalam transaction. Setelah COMMIT dieksekusi, perubahan jadi permanen dan terlihat oleh user atau session lain.
ROLLBACK: Kamu batalkan semua perubahan dalam transaction. Database kembali ke kondisi sebelum transaction dimulai, seolah-olah operasi tadi nggak pernah terjadi.
Ada juga SAVEPOINT - semacam checkpoint di tengah transaction yang bisa kamu rollback ke titik itu saja tanpa batalkan seluruh transaction.
Properti ACID: Jaminan Transaction yang Baik
| Properti | Nama Lengkap | Artinya |
|---|---|---|
| A | Atomicity | Semua operasi berhasil, atau semua dibatalkan - nggak ada yang setengah jalan |
| C | Consistency | Database selalu dalam kondisi valid sebelum dan sesudah transaction |
| I | Isolation | Transaction yang berjalan bersamaan nggak saling mengganggu satu sama lain |
| D | Durability | Setelah COMMIT, data tersimpan permanen meski sistem crash sekalipun |
Isolation Level
Properti Isolation punya beberapa level yang bisa dikonfigurasi, masing-masing dengan trade-off antara keamanan data dan performa:
READ UNCOMMITTED: Level paling longgar. Transaction bisa baca data yang belum di-commit oleh transaction lain (disebut dirty read). Jarang dipakai karena risikonya tinggi.
READ COMMITTED: Transaction hanya baca data yang sudah di-commit. Level default di banyak database seperti PostgreSQL.
REPEATABLE READ: Baris yang sudah dibaca nggak bisa diubah oleh transaction lain sampai transaction kamu selesai.
SERIALIZABLE: Level paling ketat. Transaction dieksekusi seolah-olah satu per satu secara berurutan. Paling aman, tapi performa bisa lebih lambat di traffic tinggi.
Kenapa Penting Buat Data Practitioner?
Sebagai analyst yang sering nulis SELECT, kamu mungkin jarang langsung handle transaction secara eksplisit. Tapi ngerti konsepnya penting karena:
Ini bantu debug kenapa data bisa nggak konsisten atau berubah di luar ekspektasi. Jadi dasar yang perlu kamu pahami kalau mulai nulis ETL pipeline atau stored procedure. Dan penting buat ngerti kenapa operasi bulk insert atau update yang besar kadang perlu dipecah jadi beberapa transaction lebih kecil untuk mengurangi beban lock di database.
Udah paham Transaction? Lanjut latihan SQL dan Excel yuk!
Latihan interaktif, langsung di browser.