Lompati ke konten utama
Modul 11 · Pelajaran 1 dari 441/57 dalam kursus~15 min
Pelajaran modul (1/4)

Transaksi ACID (BEGIN/COMMIT)

Fondasi keandalan database apa pun terletak pada akronim ACID:

  • Atomicity: suatu operasi selesai seluruhnya (Commit), atau gagal tanpa meninggalkan jejak yang setengah selesai (Rollback).
  • Ckonsistensi: aturan database (misalnya batasan, Kunci Asing) selalu dipatuhi.
  • Isolation: transaksi yang terjadi pada saat yang sama tidak mengganggu satu sama lain dengan cara yang tidak terkendali.
  • Ketahanan: setelah Komit, perubahan ditulis ke disk secara permanen.

Sintaks transaksi

Biasanya setiap kueri UPDATE atau DELETE diperlakukan sebagai transaksi mandiri (komit otomatis). Namun bila Anda ingin mengelompokkan beberapa operasi bersama-sama, misalnya mendebit rekening pelanggan dan melakukan pemesanan, Anda harus melakukannya secara eksplisit menggunakan sintaks transaksi.

SQL
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);

COMMIT; -- Writes the changes

Jika selama eksekusi kompleks ini aplikasi JavaScript yang mengirimkan kueri menyadari ada masalah (misalnya tidak ada cukup stok di gudang dan crash), aplikasi tersebut akan mengirimkan:

SQL
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the block

Cobalah sendiri

Latihan#sql.m11.l1.e1
Upaya: 0Memuat…

Buka transaksi.\nPerbarui produk dengan ID 10 dengan menyetel 'kuantitas' ke 0 di tabel sementara (jangan tunggu, 'kuantitas' tidak ada pada produk, mari kita ciptakan: ubah 'unit_price' di 'order_items' tetapi hal ini memerlukan batasan.\nMari kita lakukan yang lebih baik: Perbarui status ID pesanan 5 menjadi 'dikirim' dan berhasil menyelesaikan transaksi.

Memuat editor…
Tunjukkan petunjuk

Mulailah dengan BEGIN;, ubah pesanan untuk id = 5 menjadi status='shipped', lalu kirimkan dengan COMMIT;

Solusi tersedia setelah 3 upaya

Latihan#sql.m11.l1.e2
Upaya: 0Memuat…

Panik dalam produksi! Seorang pengembang menulis DELETE tanpa WHERE, yang secara historis menghapus semua ulasan.\nMari kita tunjukkan kepada mereka bagaimana rollback dilakukan. Mulai transaksi, jalankan DELETE cepat yang menghapus semuanya dari 'ulasan' (tanpa klausa WHERE), tetapi kemudian gunakan penyelamat SQL untuk membatalkan dampak sebelum menyelesaikan pemblokiran.

Memuat editor…
Tunjukkan petunjuk

BEGIN;, penghapusan bersih pada 'ulasan', dan kemudian ROLLBACK ajaib; di akhir.

Solusi tersedia setelah 3 upaya