Apa itu yang dimaksud Transaction di Database MySQL

Apa itu yang dimaksud Transaction di database mysql


Apa itu yang dimaksud Transaction di Database MySQL - Selamat pagi, siang, sore atau malam sobs-sobs sekalian, gimana kabarnya ? ya semoga semua dalam keadaan sehat walfiat sehingga bisa menikmati senja dengan secangkir kopi panas. Sruputttt Ah Mantapssss.

Oke pada kesempatan kali ini kita berkutat dengan topik pokok pembahasan seputar Database. ya mau bagaimana lagi karena ini memang menurut gua penting sobs. dan juga sebagai catatan buat gua, kalau misalnya gua lupa-lupa sedikit atau lupa-lupa banyak. Hehehe ya pokoknya begitulah.



Sebelum memulai materi ini mari kita beranjak dari tempat duduk kita untuk menyeduh kopi. hehehe karena disarankan sambil ngopi karena materi ini yaaaa bisa dibilang bakal lumayan panjang, hehe bercanda sobs.

1.    Pengertian Transaction beserta contoh

pertama-tama kita buka lembaran awal dari materi ini, yaitu tentang definisi atau pengertian dari transaction ini.

1.1    Pengertian Transaction

Ini merupakan langkah awal jika sobs-sobs ingin mengetahui materi tentang transaction. kita mulai dari pengertian. Transaction adalah sekumpulan beberapa operasi atau query didalam database yang dijalankan sebagai satu kesatuan sobs. 

disini artinya semua query didalam transaction harus berhasil semuanya tanpa ada pengecualian. dan jika salah satu saja query gagal maka semua perubahan sepenuhnya akan dibatalkan.

1.2    Contoh

Contoh sederhananya disini gua buat sebuah tabel Akun Bank abal-abal ala gua seperti dibawah ini. disini tabelnya gua kasih nama tbl_akun_bank. dan gua langsung masukan datanya sobs-sobs.

CREATE TABLE tbl_akun_bank (
	id_akun INT AUTO_INCREMENT PRIMARY KEY,
	pemilik VARCHAR(200) NOT NULL,
	saldo INT NOT NULL DEFAULT 0,
	terbilang VARCHAR(200) NOT NULL
);

INSERT INTO tbl_akun_bank (pemilik,saldo,terbilang) VALUES 
	('Angel Syntia', 500000, 'Lima ratus ribu rupiah'),
	('Bambang', 3000000, 'Tiga juta rupiah');

untuk hasil tabelnya akan seperti dibawah ini sobs-sobs.



Skenarionya : 

1.    Bambang Transfer ke Angel Syntia sebesar Rp. 300.000 (Tiga ratus ribu rupiah), maka saldo Bambang akan berkurang sebesar Rp. 300.000 (Tiga ratus ribu rupiah) sehingga saldo akhir Bambang adalah Rp. 2.700.000. untuk proses querynya kira-kira seperti ini :


UPDATE tbl_akun_bank SET saldo = saldo - 300000,
terbilang='Dua juta tujuh ratus ribu rupiah' WHERE id_akun = 2;

2.    Angel Syntia menerima transferan Bambang sebesar Rp. 300.000 (Tiga ratus ribu rupiah), maka saldo Angel Syntia akan bertambah Rp. 300.000 dan saldo akhirnya menjadi Rp. 800.000.
sedangkan untuk query kedua seperti ini :

UPDATE tbl_tabgungan SET saldo = saldo + 300000,
terbilang='Delapan ratus ribu rupiah' WHERE id_akun = 1;
dari kedua query update tersebut bayangkan sobs-sobs jika query no.2 tidak berhasil dieksekusi disini misalnya server down ketika mengeksekusi query kedua, artinya saldo Angel Syntia tidak akan bertambah dan saldo Bambang tetap terpotong. bisa jadi ngamuk tuh Angel. kira-kira seperti itu sobs. jika menggunakan transaction kita bisa menggunakan ROLLBACK untuk mengembalikan operasi dari hasil query seperti semula. contoh jika kita ROLLBACK maka saldo Bambang tetap akan 3 juta dan saldo Angel akan kembali ke 5 ratus ribu. untuk ROLLBACK sobs-sobs bisa abaikan terlebih dahulu karena pembahasannya ada dibawah. 

oke kita anggap kedua query diatas berhasil sehingga tabel menjadi dibawah ini :



2.    Cara kerja Transaction

Setalah sobs-sobs mempunyai gambaran tentang transaction selanjutnya tentang bagaimana kerjanya. 

2.1    Autocommit

pertama-tama kita harus paham dahulu apa itu autocommit. autocommit adalah sebuah mode didatabase mysql atau mariadb dimana mode ini mengatur apakah setiap statement query kita bisa langsung diproses atau tidak. dari contoh skenario sebelumnya dimana kita melakukan dua query
Query-1 :  Update untuk tabungan bambang (hasil query diproses langsung artinya akan berdampak langsung secara permanent ke field saldo, dan terbilang di tabel tbl_akun_bank.
Query-2 :  Update untuk tabungan Angel (hasil query diproses langsung artinya akan berdampak langsung secara permanent ke field saldo, dan terbilang tabel tbl_akun_bank.
Itu karena secara default autocommit di mysql atau mariadb aktif secara global. untuk membuktikannya silahkan sobs-sobs eksekusi query dibawah ini :


SELECT @@GLOBAL.AUTOCOMMIT AS status_autocommit_global;

jika hasil angka 1 autocommit aktif. yang perlu digaris bawahi lagi ya sobs query diatas untuk pengecekan pengaturan secara global.

2.2    Memulai Transaction cara pertama

Jika kita ingin memulai transaction ada beberapa keyword yang bisa kita gunakan sobs, diantaranya adalah :
  • BEGIN;
  • START TRANSACTION;
  • SET AUTOCOMMIT = 0; (ini abaikan dulu ya sobs)
dan untuk mengakhir Transaction dengan keyword berikut :
  • ROLLBACK; (Jika ingin query sebelumnya dibatalkan)
  • COMMIT; (Jika ingin query dipermanenkan)
Bisa dibilang untuk gambarannya seperti ini ya sobs.



Gua akan berikan contohnya sobs-sobs dengan skenario penggunaan START TRANSACTIONROLLBACK dan COMMIT.


- Skema ROLLBACK (Membatalkan)
Disini gua akan memasukan data baru kedalam tbl_akun_bank dengan query dibawah ini

# Memulai Transaction
START TRANSACTION;

# Memasukan data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Nobita', 200000, 'Dua ratus ribu rupiah');

# Lihat Tabel
SELECT * FROM tbl_akun_bank;

dan jika query diatas di eksekusi maka tabel yang akan tampil seperti dibawah ini sobs :


Sekarang sobs-sobs bisa mengecek apakah sobs-sobs berada dimode transaction dengan query dibawah ini :


SELECT @@in_transaction;

Jika valuenya adalah 1 maka bisa dipastikan kita masih dalam mode Transaction.
karena skenarionya adalah ROOLBACK mari kita coba. sehingga kumpulan querynya menjadi seperti dibawah ini :

# Memulai Transaction
START TRANSACTION;

# Memasukan data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Nobita', 200000, 'Dua ratus ribu rupiah');

# Lihat Tabel
SELECT * FROM tbl_akun_bank;

# Cek status transaction
SELECT @@in_transaction;

# Rollback
ROLLBACK;

dan jika kita jalankan query SELECT * FROM tbl_akun_bank; maka keadaan tabel akan balik seperti semula.


silahkan kita cek kembali apakah kita masih didalam mode transaction atau tidak SELECT @@in_transaction; maka hasilnya adalah 0 artinya kita sudah tidak berada didalam Transaction.


- Skema COMMIT (Patenkan)
Skenario yang kedua kita akan mematenkan query kita. sekarang kita coba  memasukan sebuah data lagi dan menampilkan tabelnya:

# Memulai Transaction
START TRANSACTION;

# Memasukan data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Suneo', 500000, 'Lima ratus ribu rupiah');

# Lihat Tabel
SELECT * FROM tbl_akun_bank;

maka tampilan tabel akan seperti ini :


Mungkin dalam benak sobs-sobs sekalian kok id_akun nya si Suneo jadi 4 ??
Ya karena untuk id_akun no 3 sudah dipakai pada Transaction sebelumnya.
Sekarang kita COMMIT; untuk mematenkan query dan keluar dari Transaction.

# Memulai Transaction
START TRANSACTION;

# Memasukan data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Suneo', 500000, 'Lima ratus ribu rupiah');

# Lihat Tabel
SELECT * FROM tbl_akun_bank;

# Commit
COMMIT;


Kita telah menyelesaikan Transaction cara pertama. berikutnya kita akan beranjak cara kedua. Oh iya sobs-sobs contoh diatas gua hanya memberikan contoh satu query operasi saja yang berimpact ke tabel didalam transaction yaitu insert,  sobs-sobs bisa coba mungkin dengan beberapa query.

2.3    Memulai Transaction cara kedua

Selanjutnya kita akan menggunakan cara kedua yaitu dengan menggunakan SET AUTOCOMMIT=0, artinya kita mematikan autocommit mode kita. oke sedikit penjelasan ya sobs secara default setiap sesi koneksi database kita akan mewarisi nilai autocommit dari pengaturan global. artinya secara default autocommit=1 dengan kata lain autocommit aktif dan jika kita mematikan autocommit itu hanya berlaku pada sesion koneksi database kita saat ini.
perintah ROOLBACK atau COMMIT jika kita set AUTOCOMMIT=0 akan mengakhiri Sesi Transaction tapi tidak keluar dari mode Transaction, maksudnya bagaimana bang ? maksudnya misal kita lakukan rollback dan selanjutnya kita commit itu seperti kita hanya meneruskan transaction dari transaction satu ke transaction dua dan seterusnya sobs-sobs, dan jika kita benar-benar ingin keluar dari mode Transaction kita perlu SET AUTOCOMMIT=1. seperti itu untuk lebih jelasnya gambarannya seperti dibawah ini :


gua akan berikan contoh ya sobs-sobs, pertama-tama kita sepakat bahwa isi tabel tbl_akun_bank terakhir adalah sebagai berikut sama seperti terakhir : 


sekarang kita lakukan beberapa operasi seperti query dibawah ini :

# Memulai Transaction
SET AUTOCOMMIT = 0;

# ===== Transaction - 1 =====
# Operasi Pertama : Memasukan Data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Giant', 1000000, 'Satu juta rupiah');

# Batalkan Operasi Pertama
ROLLBACK;
# ===== Akhir Transaction - 1 =====

# ===== Transaction - 2 =====
# Operasi Kedua : Update Data
UPDATE tbl_akun_bank SET saldo = saldo + 1000000,
terbilang = 'Satu juta lima ratus ribu rupiah' 
WHERE id_akun = 4;

# Operasi ketiga : Insert Data
INSERT INTO tbl_akun_bank (pemilik, saldo, terbilang)
VALUES ('Doraemon', 5000000, 'Lima juta rupiah');

# Patenkan Operasi Kedua dan Ketiga
COMMIT;
# ===== Akhir Transaction - 2 =====

# Akhir Transaction
SET AUTOCOMMIT = 1;

Silahkan diperhatikan baik query diatas sobs-sobs, jika kita cek hasil akhir dari tabel maka akan seperti dibawah ini :


untuk cara transaction sampai sini dulu sobs.

3.    Session

Untuk bisa memahami ruang lingkup transaction lebih dalam kita harus paham terlebih dahulu dengan session. sekarang gua akan berikan contoh sobs-sobs. disini gua coba login ke database dengan dua terminal dan gua pilih databasenya kebetulan database namenya adalah test. angaplah kedua terminal itu orang yang berbeda.

- Terminal A (Bambang)
- Terminal B (Angel Syntia)


Sekarang gua akan cek koneksi id untuk masing-masing terminal dengan query

SELECT CONNECTION_ID();

Maka hasilnya :



Sekarang Bambang akan masuk ke mode transaction dan melakukan query yaitu memasukan data baru ke dalam tabel. sekarang kita coba tampilkan isi tabel dari si Bambang dan Angel.


Lah kenapa kok hasilnya beda bang ?

Ya karena selagi Bambang belum commit maka hasil operasi di Database hanya berlaku pada session bambang saja, untuk membuktikannya Bambang akan commit (keluar dari transaction).


Maka dari sini bisa kita ambil kesimpulan sobs-sobs bahwa :
  • Transaction hanya berlaku pada satu session saja sobs.
  • Session lain tidak akan melihat perubahan data sampai COMMIT dilakukan.
  • Tambahan : jika session yang sedang melakukan transaction terputus maka otomatis ROLLBACK sobs-sobs.
Oh iya Transaction ini hanya berlaku jika kita membuat table dengan engine innoDB ya sobs. walaupun kita tidak mendefinisikan engine pada saat membuat tabel secara default di mysql/mariadb akan memilih engine innoDB.

Oke sekian dulu ya sobs-sobs dari materi tentang TRANSACTION ini, apa bila ada kurang jelas sobs-sobs bisa mencari refrensi dilain tempat atau bertanya pada kolom komentar. gua akhiri


Sekian dan terimaksih sobs-sobs.

See you next time.





Posting Komentar untuk "Apa itu yang dimaksud Transaction di Database MySQL"

www.domainesia.com
Web Hosting
www.domainesia.com