Akhdani Tech Talk 2021 Series #8 – Database Transaction

Database Transaction

Oleh: Aldia Rahman Mahmudi, Arvin Rasheda, Hesti Pratiwi

Apa itu Database Transaction?

Database transaction adalah salah satu subset yang disediakan SQL. Gunanya untuk mengatur alur data transaksi dalam suatu database. Dengan menggunakan Database Transaction maka kita akan memasukan beberapa query kedalam satu blok dan DBMS akan menganggap query tadi menjadi suatu kesatuan, sehingga jika terjadi error pada salah satu query maka sistem akan membatalkan (rollback) query yang sudah di eksekusi sebelumnya. Konsep ini adalah pengertian dari Atomic yaitu do all or nothing (lakukan semua atau tidak sama sekali).

Konsep Dasar

Dalam implementasinya, kita akan bertemu dengan 3 istilah berikut:Dalam implementasinya, kita akan bertemu dengan 3 istilah berikut:

  • BEGIN/START TRANSACTION

Ini adalah perintah untuk memulai sesi database transaction.

  • COMMIT

Commit adalah perintah untuk menyimpan semua perubahan pada database secara permanen, commit ini dijalankan setelah semua query dieksekusi dan tidak ada error sama sekali.

  • ROLLBACK

Rollback adalah perintah untuk membatalkan semua perubahan data, rollback ini akan dijalankan ketika ada salah satu query yang error. Jika kita menggunakan try..catch, maka perintah rollback ini biasa disimpan di blok catch.

Properti ACID

ACID merupakan singkatan dari Atomicity, Consistency, Isolation, and Durability. ACID adalah karakteristik dari Database Transaksional yang menjamin transaksi database diproses secara reliable.

1

  1. Atomicity: transaksi merupakan suatu kesatuan yang tidak dapat dipisah. Suatu proses selesai secara menyeluruh atau tidak sama sekali.
  2. Consistency: semua proses yang terjadi di database harus memiliki state yang jelas. Sehingga ketika proses gagal, maka data akan dikembalikan seperti keadaan sebelum proses transaksi dimulai.
  3. Isolation: data yang belum selesai diproses harus terisolasi dari transaksi lainnya. Berarti bahwa satu transaksi tidak dapat membaca data dari transaksi lain yang belum selesai.
  4. Durability: kemampuan DBMS untuk menyimpan data transaksi yang terjadi. Sehingga jika terjadi kegagalan, DBMS menjamin bahwa data transaksi yang telah tersimpan tidak akan hilang.

State Transaksi

2

Beberapa state dalam sebuah transaksi, diantaranya:

  1. Active: inisiasi state, transaksi tetap berada pada state ini pada saat proses transaksi
  2. Partially committed: setelah statement final telah dieksekusi
  3. Failed: setelah ditelusuri bahwa eksekusi tidak dapat diproses kembali
  4. Aborted: setelah transaksi di-rolled back dan database di-restore ke kondisi awal sebelum transaksi dimulai.
  5. Committed: setelah transaksi sukses dipenuhi

Implementasi

Misalkan kita memiliki sebuah desain database berisi 2 buah tabel (“header” dan “detail”) yaitu “akun” dan “transaksi” untuk menyimpan saldo dan transaksi yang dilakukan user. Di dalam tabel akun terdapat attribute id, nama dan jumlah saldo user tersebut, dimana saldo memiliki check constraint yaitu saldo harus lebih besar atau sama dengan 0. Dalam satu akun dapat memiliki beberapa detail transaksi yang jenisnya dapat berupa debit dan kredit yang dapat di tuliskan dalam bentuk +/- dalam attribute jenis, besaran transaksi pada attribute jumlah, tanggal dilakukannya transaksi dan akunid yang merupakan foreign key dari tabel akun. Struktur data tersebut dalam database dapat digambarkan dalam sebuah skema sederhana sebagai berikut :

3

Contoh Kasus :

User A dan B memiliki sebuah akun, dimana dalam akun tersebut user A memiliki saldo awal sebesar Rp 100.000,00 dan user B memiliki saldo awal sebesar Rp 750.000,00.

4

Misal user B ingin melakukan transfer saldo sebesar Rp. 800.000,00 ke user A, dimana transaksi ini harusnya gagal karena user B hanya memiliki saldo sebesar Rp. 750.000,00. Disini kita akan mensimulasikan transaksi tersebut dalam bentuk query untuk memperbarui data transaksi dan saldo kedua akun tersebut tanpa menggunakan database transaction.

5

Terdapat error ketika melakukan update pada saldo user B karena saldo akhir menjadi -50.000 dan terdapat check constraint dimana minimal saldo harus lebih besar atau sama dengan 0. Ketika kita melihat kembali data pada tabel akun dan transaksi maka akan terdapat kesalahan data karena ketiga query sebelumnya berhasil dilakukan sedangkan saldo user B tidak berhasil di update.

67

Berikut ini perbandingan apabila kita menggunakan database transaction.

8

Ketika terjadi error kita tinggal melakukan perintah ROLLBACK untuk membatalkan semua perubahan data / mengembalikannya lagi ke state awal, atau lakukan COMMIT jika semua query sukses dijalankan dan data akan tersimpan. Disini kita akan melakukan ROLLBACK pada transaction tersebut.

9

Jika kita melihat kembali data yang ada pada tabel akun dan transaksi, maka tidak akan terdapat perubahan dimana saldo masih sesuai data awal dan transaksi masih kosong.

10 11

Kesimpulan

Database transaction dapat disebut sebagai salah satu fundamental dari pemrograman menggunakan database relasional karena dapat membantu mencegah inkosistensi data atau kesalahan yang terjadi akibat aksi yang dilakukan pada database. Secara umum implementasi database transaction dapat membantu meningkatkan keandalan, integritas dan kinerja aplikasi yang dibangun diatas database tersebut.