Anda di halaman 1dari 16

LAPORAN PRAKTIKUM I

BASIS DATA II
TRANSACTION
Disusun untuk Memenuhi Matakuliah Praktikum Basis Data II
Yang Dibimbing oleh M. Zainal Arifin, S.Si, M.Kom

SITI NUR KHOFIFAH


160535611806
TI B 2016

UNIVERSITAS NEGERI MALANG


JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI S1 TEKNIK INFORMATIKA
SEPTEMBER 2017
MODUL VII
TRANSACTION
A. TUJUAN
Memahami konsep dan urgensi transaksi dalam kehidupan sehari hari.
Mampu mengimplementasikan transaksi basis data.
Mampu menyelesaikan operasi operasi sensitif dengan memanfaatkan transaksi
basis data.

B. LATIHAN
1. Transaksi di MySQL
MySQL mendukung transaksi melalui storage engine InnoDB (full ACID
compliance) dan BDB (BerkeleyDB) sejak versi 4.0. Oleh karena itu, untuk dapat
mengimplentasikan transaksi, DBMS MySQL harus mendukung salah satu atau kedua
engine transactional.
Untuk memeriksa dukungan transaksi basis data, gunakan perintah berikut ini :
SQL Query dan Hasil

Apabila nilai yang dikembalikan YES, berarti dukungan transaksi basis data telah
aktif. Idealnya, engine InnoDB akan menjadi default engine di MySQL.

Penjelasan :
Query tersebut merupakan cara untuk mengecek/mengetahui engine pada MySQL.
2. Tabel Transaksi
Sebelum memulai implementasi transaksi basis data, terlebih dahulu buat database
sebagai berikut :
SQL Query dan Hasil

Setelah database dtransaksi telah berhasil dibuat. Berikutnya adalah gunakan


database tersebut sebagai berikut :
SQL Query dan Hasil
Setelah database dtransaksi telah berhasil dibuka/digunakan, berikutnya adalah
mebuat sebuah table sebagai berikut:
SQL Query dan Hasil

Jika sudah memiliki table non-transactional dan ingin mengubahnya menjadi


transactional, gunakan perintah ALTER. Sebagai contoh, perintah berikut akan mengubah
engine table non-trans menjadi InnoDB :
SQL Query

Penjelasan:
- CREATE : perintah yang digunakan untuk membuat database.
- USE : perintah yang digunakan untuk menggunakan/mengaktifkan database supaya
database dapat dioperasikan.
- Pada query pembuatan tabel trans_demo, bahwa field nama hanya memiliki panjang 10
karakter dengan type data VARCHAR, field tidak boleh kosong, nama merupakan
PRIMARY KEY yang bersifat unik dan menggunakan engine InnoDB.

3. Implementasi Transaksi
Transaksi di MySQL diinisiasi dengan menggunakaan pernyataan START
TRANSACTION atau BEGIN dan diakhiri dengan COMMIT untuk menerapkan semua
transaksi.
Sebagai ilustrasi, ikuti dan pahami contoh kasus berikut ini :
1) Aktifkan transaksi basis data,
SQL Query dan Hasil

2) Tambahkan dua baris data ke table trans_demo, misalnya mysql dan oracle,
SQL Query dan Hasil
3) Periksa hasil penambahan data,
SQL Query dan Hasil

4) Keluar dari terminal,


SQL Query dan Hasil

5) Login kembali ke basis data yang sama, kemudian periksa isi table trans_demo.
SQL Query dan Hasil

Dapat diperlihatkan pada gambar di atas, bahwa table trans_demo kosong. Hal tersebut
dikarenakan tidak diterapkannya transaksi dengan memanggil COMMIT. Adapun
penutupan prompt mysql mengakibatkan transaksi di-rollback secara implisit.
Sekarang ulangi langkah nomer 2, namun pada langkah nomer 4, ketikkan pernyataan
COMMIT sebagai berikut :
SQL Query dan Hasil

Dari hasil di atas, telah dilakukan penutupan prompt mysql dan dibuka kembali.
Ketika telah digunakan COMMIT, maka setelah prompt mysql yang telah ditutup di
buka kembali, data telah tersimpan (tidak di-rollback).
Autocommit Mode
Selain menggunakan START TRANSACTION, juga dapat menggunakan
pernyataan SET untuk mengatur nilai variable autocommit. Nilai default autocommit
adalah 1, yang menyatakan bahwa transaksi basis data tidak aktif. Dengan kata lain, setiap
perintah langsung diterapkan secara permanen.
1. Terlebih dahulu periksa nilai variable autocommit,
SQL Query dan Hasil

2. Tetapkan nilai autocommit menjadi 0 (mode transaksi on),


SQL Query dan Hasil

3. Tambahkan data berikut ini pada table trans_demo,


SQL Query dan Hasil

4. Keluar dari prompt mysql, kemudian login kembali dan periksa hasil penambahan
data, seharusnya, hasil penambahan tidak akan diterapkan secara permanen di basis
data,
5. Amati apa yang terjadi ketika melakukan langkah nomor 3 dengan menampilkan
semua data pada table trans_demo,
6. Periksa nilai variable autocommit,
7. Lakukan langkah nomor 4, kemudian periksa nilai variable autocommit,
Hasil setelah Exit

8. Berikan kesimpulan dari langkah nomor 5 sampai dengan langkah nomor 7 pada
laporan.
Selama autocommit belum dikembalikan ke 1, maka mode
transaksi basis data akan selalu aktif, sehingga tidak diperlukan lagi
pemanggilan .

Kesimpulan :

Ketika user menggunakan pemanggilan autocommit, penambahan data yang


dilakukan sebelum exit akan hilang, karena penambahan tersebut tidak disimpan secara
permanen di basis data. Nilai autocommit pun akan kembali ke default 1 ketika dilakukan
exit kemudian login kembali pada database yang sama, itu terjadi karena variable
autocommit ter-reset saat exit. Walaupun login pada database yang sama variable
autocommit tetap kembali pada nilai publiknya, itu terjadi karena variable autocommit
berlaku untuk satu sesi login saja.

Penjelasan :

- Pada point ini menjelaskan cara untuk mengaktifkan TRANSACTION, cara menginputkan
data pada tabel trans_demo, cara melihat/mengecek tabel yang telah dibuat.

- Ketika user pada SQL Query nya tidak memanggil COMMIT, maka data data yang telah
ditambahkan user tidak tersimpan dalam database dan mengakibatkan transaksi di rollback
secara implisit.
- Ketika user menggunakan perintah COMMIT maka data yang telah diinputkan user
tersebut akan tersimpan(data diamankan), jadi tidak terjadi roolback.

4. Rollback Transaksi
Akhir pernyataan transaksi dapat berupa COMMIT atau ROLLBACK, tergantung
pada kondisinya. Pernyataan ROLLBACK digunakan untuk mengugurkan rangkaian
perintah. ROLLBACK akan dilakukan manakala ada satu atau lebih perintah yang gagal
dilaksanakan. Di samping itu, ROLLBACK juga dapat dilakukan secara eksplisit dengan
memanggil pernyataan ROLLBACK.
1) Aktifkan transaksi basis data,
SQL Query dan Hasil

2) Terlebih dahulu periksa nilai di table trans_demo,


SQL Query dan Hasil

3) Tambahkan baris data berikut ini,


SQL Query dan Hasil

4) Tambahkan lagi baris data, namun dengan nilai yang sama,


SQL Query dan Hasil
5) Berikan pernyataan ROLLBACK untuk membatalkan rangkaian perintah dalam satu
transaksi,
SQL Query dan Hasil

6) Sampai langkah ini, sehaarusnya tidak ada data baru yang tersimpan.
SQL Query dan Hasil

Pemanggilan START TRANSACTION di akhir transaksi yang tidak ditutup, misal


menggunakan COMMIT, maka akan mengakibatkan dipanggilanya COMMIT secara
implisit. Dengan demikian, tidak dapat lagi memaksa pembatalan melalui pernyataa
ROLLBACK.
Penjelasan:
Perintah ROLLBACK itu perintah yang digunakan untuk kembali ke posisi dimana kita
telah menentukan savepoint, atau bisa dibilang fungsi roolback sama seperti restore data.
5. Checkpointing
Idealnya, ROLLBACK akan menggurkan keseluruhan perintah dalam blok transaksi.
Kondisi ini terkadang tidak dikehendaki, misal terdapat tiga perintah, namun kita hanya
ingin menggugurkan perintah setelah perintah kedua (perintah pertama masih ada). Dalam
kasus ini, kita bisa memanfaatkan fitur checkpointing.
1) Aktifkan transaksi basis data,
SQL Query dan Hasil

2) Terlebih dahulu periksa nilai di table trans_demo,


SQL Query dan Hasil
3) Tambahkan baris data berikut,
SQL Query dan Hasil

4) Gunakan pernyataan SAVEPOINT untuk menandai perintah pertama,


SQL Query dan Hasil

5) Tambahkan lagi baris baru,


SQL Query dan Hasil

6) Berikan perintah ROLLBACK ke SAVEPOINT my_point1,


SQL Query dan Hasil

7) Tambahkan lagi sebuah baris baru,


SQL Query dan Hasil

8) Terapkan transaksi,
SQL Query dan Hasil
9) Lihat hasilnya.
SQL Query dan Hasil

Sampai di sini seharusnya Anda dapat memahami fungsi checkpointing. Jika Anda
masih belum memahami fungsi checkpointing, ulangi langkah-langkah di atas hingga
benar-benar paham.
Penjelasan :

Pada checkpointing dari percobaan diatas, ketika kita telah menentukan savepointnya,
maka data yang telah kita input sebelumnya itu akan disimpan dalam database. Selanjutnya
ketika kita input data lagi (sqlite) dan memberikan perintah ROLLBACK TO
SAVEPOINT my_point1, maka data sqlite akan ter-ROLLBACK. Sedangkan data db2
tidak ter-ROLLBACK karena penambahan data tersebut dilakukan setelah perintah
ROLLBACK dan itu juga sudah dibubuhkan perintah COMMIT.

C. TUGAS PRAKTIKUM
Untuk menyelesaikan tugas praktikum, gunakan tabel tabungan dengan struktur
sebagai berikut :

Langkah - langkah membuat tabel tabungan, memasukkan data pada tabel,


sekaligus menampilkan tabel tabungan.
1) Definisikan stored procedure untuk menangani transfer antar rekening dengan
mengimplementasikan transaksi basis data. Setelah transfer uang berhasil, tampilkan sisa
saldo rekening pengirim!
SQL Query:

Hasil:

Analisis:
Pada praktikum ini menggunakan fungsi procedure yang di dalamnya
terdapat fungsi transaction yang dalam hal ini digunakan untuk mentransfer uang ke
rekening. Dalam proses transaction tersebut terdapat variabel sementara(temporary)
yaitu rek1, rek2 dan jmlh. rek1(sebagai rekening pengirim) dan rek2(sebagai rekening
penerima). Saldo awal no_rek 8988 = 600.000, dan no_rek 8989 = 1.500.000,.
Dalam percobaan ini no_rek 8988 berhasil melakukan transfer uang sejumlah Rp.
300.000, ke no_rek 8989. Dan sisa saldo pengirim(no_rek 8988) adalah sejumlah Rp.
300.000,. (Saldo no_rek 8988 dikurangi sebesar Rp.300.000, dan saldo no_rek 8989
ditambah sebesar Rp.300.000,)
2) Definisikan stored procedure untuk menangani penarikan tabungan dengan
mengimplementasikan transaksi basis data. Skenarionya adalah penarikan hanya dapat
dilakukan jika :
Saldo mencukupi,
Menyisakan saldo minimal Rp. 50.000, dan
Jumlah (nominal) penarikan minimal Rp. 50.000 dan maksimal Rp. 500.000.

SQL Query:
Hasil:

Analisis:
Dalam praktikum ini digunakan untuk proses penarikan uang dengan
menggunakan fungsi procedure yang di dalamnya terdapat fungsi transaction, untuk
melakukan tarik tunai saldo harus memenuhi beberapa syarat kondisi :
Saldo mencukupi,
Menyisakan saldo minimal Rp. 50.000, dan
Jumlah (nominal) penarikan minimal Rp. 50.000 dan maksimal Rp. 500.000.
Dari percobaan pada query tersebut, no_rek 8988 memiliki sejumlah saldo Rp.
300.000, dan no_rek 8989 memiliki sejumlah saldo Rp. 1.800.000,.
No_rek 8989 melakukan tarik tunai dengan nominal Rp.30.000, akan tetapi muncul
pernyataan Tarik Tunai tersebut Tidak Tersedia!(Min Rp.50.000 dan Max
Rp.500.000), hal tersebut terjadi karena tidak memenuhi ketentuan yang berlaku.
Kemudian no_rek 8989 melakukan tarik tunai lagi dengan nominal Rp.250.000, tarik
tunai tersebut berhasil dan menyisakan saldo sejumlah Rp.1.550.000,. Selanjutnya
no_rek 8988 melakukan tarik tunai sejumlah Rp.450.000, akan tetapi muncul
pernyataan Saldo Anda Tidak Mencukupi!, tarik tunai tersebut tidak dieksekusi
dikarenakan si no_rek 8988 hanya memiliki saldo Rp.300.000,.
3) Definisikan stored procedure untuk menangani penarikan berulang. Artinya, penarikan
tabungan dengan nominal tertentu yang dispesifikasikan akan dilakukan sebanyak iterasi
yang dispesifikasikan juga. Aturan penarikan tabungan pada soal nomor 2 masih berlaku
di sini. Sebagai ilustrasi, missal Tono memiliki saldo Rp. 300.000, kemudian melakukan
penarikan melalui stored procedure berulang dengan nominal Rp. 100.000 sebanyak 3
kali, maka stored procedure hanya akan mengcommit penarikan Rp. 200.000 (2x Rp.
100.000). Sisa Rp. 100.000 tidak dapat di ambil, karena harus menyisakan saldo Rp.
50.000.

SQL Query:
Hasil:

Analisis:
Pada praktikum ini digunakan untuk proses penarikan uang secara berulang
dengan menggunakan fungsi procedure yang didalamnya terdapat fungsi transaction
dan di dalam query ini terdapat ketentuanketentuan seperti pada soal no dua sehingga
penarikan uang akan terlaksana apabila ketentuan-ketentuannya terlaksana, dan kita
bisa menentukan berapa kali kita ingin menarik uang.
Dari percobaan ini, no_rek 8988 memiliki sejumlah saldo Rp. 300.000, dan no_rek
8989 memiliki sejumlah saldo Rp. 1.550.000,.
No_rek 8988 melakukan tarik tunai berulang 3 kali dengan nominal Rp.100.000,
(100.000x3), karena saldonya hanya berjumlah Rp.300.000 maka tarik tunai tersebut
hanya mengeksekusi sejumlah Rp.200.000(sudah tercommit), dan saldonya saat ini
tersisa Rp.100.000,.
Selanjutnya, no_rek 8989 melakukan tarik tunai sejumlah Rp.50.000 berulang 3
kali(=Rp.150.000), transaksi tersebut berhasil dan sisa saldonya Rp.1.400.000.
Kemudian no_rek 8989 kembali melakukan tarik tunai sejumlah Rp.20.000 berulang 2
kali(=Rp.40.000,) akan tetapi transaksi tersebut gagal karena tidak memenuhi
ketentuan dan muncul pernyataan Tarik Tunai tersebut Tidak Tersedia!(Min
Rp.50.000 dan Max Rp.500.000).

D. KESIMPULAN
Konsep transantion pada database antara lain:
Tandai bagian awal dan akhir perintah,
Putuskan di bagian akhir untuk mengeksekusi (commit) atau membatalkan
(rollback) semua perintah.
Property transaksi basis data dikenal sebagai ACID(Atomicity, Consistency, Isolation,
Durabilaty).
COMMIT : mengakhiri transaksi yang sedang terjadi dengan merubah semua pending
data menjadi permanen.
ROLLBACK : mengembalikan transaksi kebentuk semula sampai bertemu COMMIT
terakhir kali.
SAVEPOINT name : sebagai penanda di dalam transaksi yang sedang terjadi.
ROLLBACK TO SAVEPOINT : mengembalikan transaksi sampai bertemunya
SAVEPOINT.

Anda mungkin juga menyukai