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.
- 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;
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 :
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"
Posting Komentar