Transactions & Isolation Levels — Database

Apa itu Transaction? Transaction adalah sekelompok operasi database yang dijalankan sebagai satu unit. Semua berhasil, atau semua dibatalkan (all-or-nothing). A

Apa itu Transaction?

Transaction adalah sekelompok operasi database yang dijalankan sebagai satu unit. Semua berhasil, atau semua dibatalkan (all-or-nothing).

ACID Properties

-- Contoh transfer uang: harus atomic
BEGIN;
    UPDATE accounts SET balance = balance - 500000 WHERE id = 1;
    UPDATE accounts SET balance = balance + 500000 WHERE id = 2;
COMMIT;
-- Jika salah satu gagal: ROLLBACK, tidak ada uang hilang

-- Dengan error handling
BEGIN;
    UPDATE accounts SET balance = balance - 500000 WHERE id = 1;
    -- Cek saldo cukup
    IF (SELECT balance FROM accounts WHERE id = 1) < 0 THEN
        ROLLBACK;
    END IF;
    UPDATE accounts SET balance = balance + 500000 WHERE id = 2;
COMMIT;

Isolation Levels

Isolation level menentukan seberapa ketat isolasi antar transaction yang berjalan bersamaan.

1. Read Uncommitted

Bisa baca data dari transaction lain yang belum commit (dirty read). Jarang digunakan.

2. Read Committed (Default PostgreSQL)

Hanya baca data yang sudah di-commit. Aman dari dirty read, tapi bisa terjadi non-repeatable read.

3. Repeatable Read

Data yang dibaca dalam satu transaction konsisten. Aman dari non-repeatable read.

4. Serializable

Isolasi tertinggi. Transaction berjalan seolah-olah sequential. Paling aman tapi paling lambat.

-- Set isolation level
BEGIN ISOLATION LEVEL SERIALIZABLE;
    SELECT balance FROM accounts WHERE id = 1;
    -- ...
COMMIT;

Di Laravel

// Basic transaction
DB::transaction(function () {
    DB::table('accounts')->where('id', 1)->decrement('balance', 500000);
    DB::table('accounts')->where('id', 2)->increment('balance', 500000);
});

// Manual transaction
DB::beginTransaction();
try {
    // ... operations
    DB::commit();
} catch (\Exception $e) {
    DB::rollBack();
    throw $e;
}

Yang akan kamu pelajari