Smart Transactions di ADOdb dan Framework CodeIgniter

26 May 2008

Transaksi di database adalah hal yang cukup penting, terutama ketika kita sedang membangun aplikasi yang kompleks, melibatkan banyak tabel yang saling berhubungan.

Transaksi digunakan saat kita menjalankan beberapa query sebagai satu kesatuan, untuk memastikan bahwa semua query tersebut berhasil dijalankan. Jika ada 1 saja query yang gagal, maka semua query seharusnya dibatalkan. All Or Nothing.

Berikut ini adalah contoh penggunaan transaksi menggunakan database library ADOdb

1
2
3
4
5
6
7
8
9
10
11
12
13
$db->StartTrans();
 
$db->Execute("INSERT INTO payment ...");
$db->Execute("INSERT INTO payment_item ...");
$db->Execute("INSERT INTO payment_item ...");
 
$ok = $db->CompleteTrans();
 
if ($ok) {
	echo 'sukses';
} else {
	echo 'gagal';
}

Dengan menggunakan transaksi yang smart, kita tidak perlu lagi mengecek satu persatu tiap query. Proses commit atau rollback dijalankan secara otomatis berdasarkan sukses atau gagal nya query-query tersebut.

Pada database MySQL, tipe tabel MyISAM belum mensupport transaksi. Jadi kalau ingin memanfaatkan transaksi di MySQL, harus menggunakan tipe tabel InnoDB atau BDB.

Update (05/10/2008) :
Framework CodeIgniter juga mengimplementasikan proses transaksi yang “smart” mirip dengan adodb. Script berikut ini saya ambil dari User Guide Framework CodeIgniter :

1
2
3
4
5
6
7
8
9
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->trans_complete();
 
if ($this->db->trans_status() === FALSE)
{
	// generate an error... or use the log_message() function to log your error
}

Tags: , , , , , , , , , , , , , , , ,

Posted in Database, Programming


5 Responses

  • wekadesign

    Yups.. jangan lupa sebelumnya…

    Seting Autocommitnya dimatiin dulu ya… :D

  • gawibowo

    Autocommit otomatis diset ke FALSE sewaktu kita menjalankan fungsi BeginTrans() ataupun StartTrans().
    Jadi tidak perlu mematikan secara manual juga tidak apa-apa.
    Udah tak coba kok, jika ada query gagal, transaksinya otomatis di ROLLBACK ;)

  • wekadesign

    sips sips sips

  • henrihnr

    Menurut saya transaction penting jika terjadi proses “mengubah data”, bukan karna berhubungan dengan banyak table (CMIIW)..

  • gawibowo

    Maksud saya adalah jika ada sekumpulan (lebih dari 1) proses INSERT/UPDATE/DELETE. Memang tidak harus pada banyak tabel, tapi saya mengambil contoh query tsb pada banyak tabel yg berhubungan.

Leave a Comment