Penggunaan fungsi COMMITIT pada PHP

Penggunaan fungsi COMMITIT pada PHP

http://8thinktank.co.id/wp-content/uploads/2016/09/Business-Transaction.png

Assalamualaikum warahmatullahi wabarakatuh.

Saya ingin berbagi sedikit perbincangan tentang database bersama beberapa senior software engineer di Bandung.

Pembaca: Enggak ada perbincangan lain, Kang, selain database?

Penulis: Skema database itu paling penting (menurut saya). Mengenai bagaimana data dalam sebuah database itu berinteraksi.

Ketika kami berbincang, sampailah pada poin database transaction. Dengan sedikit kaget dan terheran-heran, orang ini tidak tahu apa itu database transaction. Namun, saya positive thinking mungkin orang ini lupa. Wajar seorang manusia itu lupa apalagi dihadapkan dengan beberapa ribu baris kodingan atau beberapa ratus tabel. Toh, saya juga banyak lupanya dibanding ingatnya. Untuk itu, saya berterima kasih kepada si mbah Google, Stack Overflow, beserta jajarannya. :(

A. Pengertian Database Transaction

Database transaction adalah salah satu subset yang disediakan SQL. Gunanya untuk mengatur alur data transaksi dalam suatu database. Transaction ini biasanya digunakan didalam trigger. Namun, jangan samakan transaction ini dengan trigger. Trigger dijalankan untuk menanggapi perubahan tertentu pada tabel tertentu.

Mari saya contohkan ilustrasinya.

Toko-Queen mempunyai barang (10) dan ingin mengirim barang ke salah satu cabang Toko-War (5) dan War ini tidak memiliki barang tersebut.

Proses Alur Data yang Sukses

Lalu, kita bagi menjadi beberapa proses alur data:

  1. Queen mengirim barang (source) ke cabang (destination) War
  2. Data barang diterima oleh War
  3. Jumlah yang berada di Queen berkurang menjadi 5
  4. Jumlah barang bertambah di War menjadi 5.

Flow di atas adalah kasus yang dimana semua proses alur datanya berhasil selamat sampai tujuan akhir. Lalu, bagaimana jika di tengah-tengah proses terdapat kegagalan? Kegagalan ini bisa disebabkan banyak hal (internet mati, mati lampu, salah tipe data, dan lain-lain).

Proses Alur Data yang Gagal

Flow di atas update stock source terdapat kegagalan, sedangkan update stock destination berhasil. Ini akan berakibat fatal sebab stok dari Queen tidak berkurang, sedangkan Stock War bertambah dengan sendirinya. Seram, bukan? :(

B. Konsep Database Transaction

Karena kasus sejenis itu, para ilmuwan dunia “Juru Ketik” membuat yang disebut proses Transaction. Dengan ini, jika ada kegagalan dalam 1 node (proses), seluruh transaksi (proses input) akan dibatalkan. Sementara itu, jika berhasil akan di-commit.

Transaction terdiri atas hal-hal berikut:

  1. BEGIN
    digunakan saat data akan diproses.
  2. COMMIT
    digunakan jika semua kasus pada alur proses berhasil. Bila demikian, fungsi commit harus diterapkan agar tersimpan di database.
  3. ROLLBACK
    digunakan jika terdapat kasus ada kegagalan (kesalahan/error) di salah satu proses itu. Maka, semua proses input akan dibatalkan (rollback) dan tidak akan disimpan ke dalam database.

Proses Transaction Commit

Proses Transaction Rollback

C. Implementasi Transaction MySQL

Fungsi CREATE TABLE

Fungsi INSERT TABLE

Fungsi BEGIN dan ROLLBACK

Fungsi BEGIN dan COMMIT
  1. Kuantitas (qty) yang dimiliki Queen (10) sedangkan War (0)
  2. Dengan BEGIN, kita mulai SQL transaction
  3. Kita kurangi qty Queen (id: 1) sebanyak 5
  4. Lakukan COMMIT agar data tersebut ter-update
  5. Lakukan ROLLBACK jika data yang dimasukkan salah atau proses update ingin dibatalkan.

Di atas adalah contoh sederhana implementasi SQL transaction di MySQL. Lalu, bagaimana dengan postgres atau sistem manajemen database lain? Kurang lebih sama. Yang terpenting bukanlah cara implementasinya, melainkan konsep dari SQL transaction tersebut.

Kesimpulan

Database transaction ini sangat penting digunakan, apalagi jika kalian bermain di sistem informasi penjualan, sistem informasi keuangan, pembayaran, dan sejenisnya. Atau, secara sederhana, jika kalian bermain dengan tabel yang banyak dan saling berelasi.

Rinaldi Sudrajat Wibawa, sering dipanggil Queen. Dia adalah seorang “juru ketik” di GITS Indonesia. Ini adalah tulisan pertamanya di Medium. Menurutnya, lebih baik sedikit berbagi daripada tidak sama sekali.