Smart Transactions di ADOdb dan Framework CodeIgniter

26 May 2008 29,156 views

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
}

8 Comments

  1. wekadesign says:

    Yups.. jangan lupa sebelumnya…

    Seting Autocommitnya dimatiin dulu ya… :D

  2. gawibowo says:

    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 ;)

  3. henrihnr says:

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

  4. gawibowo says:

    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.

  5. Hmm.. emang sih transaction diperlukan untuk proses “update data”, tapi pada kenyataan-nya transaction itu diperlukan / lebih jelas terlihat guna-nya pada transaksi yang berurusan dengan tabel lebih dari 1 :)

    Klo utk 1 tabel, saya rasa ga begitu berpengaruh soalnya kecepatan proses insert/update kan termasuk cepet tuh. Beda ketika kita ingin meng-insert langsung ke “beberapa” tabel :)

    CMIIW

  6. adiputra says:

    emm,,di CI bisa ngatur transaksi data di db juga ya mas,,baru tahu saya…

    manteb mas,,thanks infonya..

  7. indra says:

    jangan lupa di di ADODB ganti mysql extention menjadi “mysqlt”, karena kalo mysql saja tidak mensupport transaksi

Leave a Reply

Your email address will not be published. Required fields are marked *