Transaction adalah eksekusi rangkaian proses query yang dilakukan jika salah satu proses query gagal maka data dikembalikan seperti semula proses ini dinamakan ROLLBACK, dan jika semua query berjalan sukses maka dilakukan COMMIT.

Transaksi pada database MySQL hanya dapat dilakukan jika menggunakan Engine InnoDB.
Jika menggunakan konsol mysql proses ekekusi querynya dilakukan seperti ini

1
2
3
mysql> start transaction ;
BLOK SQL
mysql> commit/rollback

Pada aplikasi yang menggunakan Framework Yii anda dapat lakukan proses berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$sql1 = "INSERT INTO kategori (nama) VALUES ('Elektronik')";
$sql2 = "INSERT INTO kategori (nama) VALUES ('Komputer')";
$transaction = Yii::app()->db->beginTransaction();
try
{
   $connection->createCommand($sql1)->execute();
   $connection->createCommand($sql2)->execute();
   //.... other SQL executions
   $transaction->commit();
}
catch(Exception $e)
{
   $transaction->rollback();
}

Berikut jika menggunakan class Model, misal model Produk dan model Pesanan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$pesanan = new Pesanan;
 if (isset($_POST['Pesanan'])) {
  $transaction = Yii::app()->db->beginTransaction();
    try {
       $pesanan->attributes = $_POST['Pesanan'];
       $produk = Produk::model()->findByPK($pesanan->idproduk);
       if ($produk->stok - $pesanan->qty >=0 ) {
            $pesanan->save();
            $produk->stok = $produk->stok - $pesanan->qty;
           Produk::model()->updateByPk($produk->id,array('stok'=>$produk->stok); // $produk->save() ?
            $transaction->commit();
        }
    }catch(Exception $e) {
           $transcation->rollback();
    }
}

oleh Sirojul Munir, Dosen Tetap STT Terpadu Nurul Fikri — rojuman@nurulfikri.ac.id

Share