BAB I TUJUAN DAN LANDASAN TEORI A. TUJUAN a. Mahasiswa memahami manfaat Manajemen Transaksi. b. Mahasiswa dapat membuat Manajemen Transaksi. B. LANDASAN TEORI Transaksi adalah sebuah aksi atau serangkaian aksi, yang dilakukan oleh user atau aplikasi yang mengakses atau mengubah isi dari database atau transaksi juga bisa diartikan sebagai pengeksekusian sebuah program/aplikasi yang melakukan pengaksesan dan perubahan basis data. Namun apabila kita ingin melakukan transaksi data setelah melakukan transksi haruslah tetap konsisten dan DBMS yang kita gunakan juga harus menjamin bahwa setiap transaksi harus dapat dikerjakan secara utuh atau tidak sama sekali. Tidak boleh ada transaksi yang hanya dikerjakan sebagian, karena dapat menyebabkan inkonsistensi basis data. Misalkan ketika kita melakukan pengubahan, penambahan atau penghapusan suatu tabel maka akan berdampak pada isi tabel tersebut dan pada saat eksekusi transaksi terjadi kagagalan, maka akan menimbulkan ketidak konsistenan integrasi antar tabel. Namun Untuk menjamin agar integritas dapat tetap terpelihara maka setiap transaksi harus memiliki sifat-sifat: 1. Atomik, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali. 2. Konsisten, dimana eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir. 3. Terisolasi, jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua transaksi yang dilaksanakan pada saat yang bersamaan tersebut harus dapat dimulai dan bisa berakhir. 1 2 4. Bertahan, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya sistem menjadi mati. Terhentinya suatu transaksi tidak selalu diakibatkan oleh kegagalan insidental baik dari perangkat keras (crash) ataupun kemacetan sistem operasi (hang). Tapi lebih sering terjadi karena user sengaja menghentikan transaksi atau karena penghentian transaksi oleh DBMS akibat adanya kondisi tak diinginkan, seperti deadlock atau timeout. Sebuah transaksi dapat menghasilkan dua kemungkinan: a. Jika dilaksanakan lengkap seluruhnya, transaksi tersebut telah di commit dan basis data mencapai keadaan konsisten baru. b. Jika transaksi tidak sukses, maka transaksi dibatalkan dan basis data dikembalikan ke keadaan konsisten sebelumnya (rollback). Transaksi yang sudah di commit tidak dapat dibatalkan lagi. Jika ada kesalahan, maka harus dilakukan transaksi lain yang membalik dampak transaksi sebelumnya Ketika transaksi dilaksanakan/ dilakukan dari awal sampai akhir maka terdapat beberapa kemungkinan yang akan terjadi, yaitu : 1. Aktif (Active), yang merupakan status awal (initial state) sebuah transaksi yang menunjukkan transaksi tersebut masih dieksekusi. 2. Berhasil Sebagian (Partially Committed), yaitu keadaan yang dicapai transaksi tepat pada saat operasi terakhir dalam transaksi selesai dikerjakan. 3. Gagal (Failed), yang merupakan keadaan dimana sebuah transaksi terhenti pengeksekusiannya sebelum tuntas sama sekali. 4. Batal (Aborted), yaitu keadaan dimana sebuah transaksi dianggap tidak/belum dikerjakan yang tentu dengan terlebih dahulu diawali dengan mengembalikan semua data yang telah diubah ke nilai-nilai semula. (yang menjadi tanggung jawab DBMS). 5. Berhasil Sempurna (Committed), keadaan dimana transaksi telah dinyatakan berhasil dikerjakan seluruhnya dan basis data telah merefleksikan perubahan-perubahan yang memang diinginkan transaksi. 3 Ketika sebuah transaksi mulai dikerjakan, maka transaksi itu berada dalam status aktif. Jika terjadi penghentian sebelum operasi berakhir, maka transaksi segera beralih ke status gagal/failed. Namun, bila keseluruhan transaksi selesai dikerjakan, maka transaksi itu berada pada status berhasil sebagian/partially committed, dimana perubahan-perubahan data masih berada di dalam memori utama yang bersifat volatile/tidak permanen. Transaksi dalam status ini masih mungkin untuk pindah ke status failed, karena ada pembatalan transaksi baik sengaja maupun tidak. Jika tidak beralih ke status failed, maka nilai-nilai data yang ada di memori utama akan direkam ke dalam disk yang bersifat permanen. Begitu proses perekaman selesai, maka transaksi beralih ke status committed. Sementara itu, transaksi yang berada pada status failed, maka DBMS harus menjalan proses rollback. Proses tersebut dapat berupa: 1) Mengulangi pelaksanaan transaksi / restart, yang dilakukan pada transaksi yang failed akbiat kemacetan perangkat keras ataupun perangkat lunak dan bukannya penghentian transaksi secara sengaja oleh user. 2) Mematikan transaksi / kill, yang dilakukan untuk transaksi yang dihentikan secara sengaja oleh user atau akibat adanya kesalahan lojik dalam penulisan aplikasi. Sistem basis data harus menjamin ACID (Atomicity, Consistency, Isolation and Durability) pada setiap transaksi. Sebuah transaksi mungkin membutuhkan beberapa query, yang membaca atau menulis informasi dalam basis data. Ketika hal ini terjadi, harus dipastikan tidak ada query yang terlewat yang akan digunakan pada basis data. Terdapat dua pilihan transaksi yang bisa dilakukan, yaitu commit transaction atau rollback transaction. Namun sebelumnya harus didahului dengan perintah begin transaction atau start transaction. 4 BAB II PEMBAHASAN Pembahasan ini dibuat menggunakan database restoran pada modul pertama. Berikut ini penjelasannya : 1. Lengkapi prosedur hitung total dan hitung total pembayaran dengan manajemen transaksi. Gambar 2.1. Procedure Hitung Total dengan Manajemen Transaksi Penjelasan : Prosedur diatas bernama HitungTotal2 dan memiliki 3 parameter yaitu nfaktur hrga dan Bnyak. Baris perintah ketiga yaitu declare exit handler for sqlexception, sqlwarning,not found rollback , digunakan untuk mendeklarasikan fungsi exception handling bila terjadi error, warning dan proses-proses yang abnormal maka akan di lakukan perintah rollback, atau jika terdapat eksepsi atau warning maka kondisi database akan dikembalikan ke kondisi semula. rollback artinya jika terjadi eror pada query dalam sebuah transaksi, maka semua perubahan yang terjadi sebelumnya akan diabaikan dan query selanjutnya juga akan diabaikan atau artinya rollback akan mengabaikan semua perubahan. Baris selanjutnya yaitu Start transaction;, adalah perintah yang digunakan untuk memulai transaksi. Isi transaksi adalah UPDATE Pembayaran SET JumlahPemesanan=Bnyak, total=hrga*Bnyak WHERE Nofaktur=nfaktur;, yang merupakan perintah untuk meng-update tabel pembayaran dengan field total telah dihitung. Commit;, adalah sebuah perintah digunakan untuk menyimpan perubah secara fisik ke database. 5 Untuk memanggil procedure diatas digunakan perintah CALL HitungTotal2('F1','20000','15'); , dimana F1 adalah nomor faktur, 20000 merupakan harga yang baru, dan 15 merupakan jumlah pemesanan yang baru. Tampilan outputnya yaitu : Gambar 2.2. Output HitungTotal 2. Membuat Prosedur Menghitung diskon. Diskon akan diberikan 5% jika ada pengunjung yang berbelanja atau membeli makan lebih dari 200.000. Gambar 2.3. Procedure Menampilkan NoMeja yang Paling Banyak Ditempati Penjelasan: Prosedur ini bernama HitungDiskon dan memiliki parameter yaitu nfaktur dengan tipe data varchar(4). Sama seperti langkah pertama, prosedur ini diberikan deklarasi untuk exception handling pada baris ketiga prosedur yang digunakan untuk menangani bila terjadi error, warning dan proses-proses yang abnormal maka akan di lakukan perintah rollback, atau jika terdapat eksepsi atau warning maka kondisi database akan dikembalikan ke kondisi semula. Dalam transaksi diberikan perintah update pembayaran set diskon='0' where total<'200000' and nofaktur=nfaktur; untuk mengupdate tabel pembayaran dimana tidak akan diberikan diskon jika total belanja kurang dari 200.000 dan juga perintah update pembayaran set diskon=((total*5)/100) where total>='200000' and nofaktur=nfaktur; yang berfungsi untuk update pada tabel pembayaran. Tetapi perintah ini digunakan jika ada pengunjung yang berbelanja lebih dari 200.000 maka akan diberikan diskon 5%. 6 Untuk memanggil procedure digunakan perintah CALL HitungDiskon('F1'); , dimana F1 adalah nomor faktur yang akan dilakukan penghitungan diskon. Tampilan outputnya yaitu : Gambar 2.4. HitungDiskon 3. Membuat procedure hitung total pembayaran. Gambar 2.5. HitungTotalPembayaran Penjelasan: Prosedur ini bernama HitungTotalPembayaran dan memiliki parameter yaitu nfaktur dengan tipe data VARCHAR(4). Prosedur ini juga menggunakan handling rollback untuk mengembalikan database ke kondisi semula bila terjadi kesalahan. Baris perintah UPDATE pembayaran SET TotalPembayaran=Total-Diskon WHERE NoFaktur=nfaktur;, ini merupakan perintah update pada tabel pembayaran yang digunakan pada field Total Pembayaran. Dimana untuk dapat mengetahui total pemabayaran maka akan dilakukan penghitungan sesuai dengan operasi pengurangan, yaitu total harga makanan dikurangi dengan diskon yang diberikan. Untuk memanggil procedure digunakan perintah CALL HitungTotalPembayaran('F1');, dimana F1 merupakan nomor faktur yang akan dilakukan update total pembayaran. Tampilan outputnya yaitu : Gambar 2.6. HitungTotalpembayaran 7 4. Membuat procedure untuk menampilkan menu paling sering dipesan dan menu yang memiliki harga paling mahal. Gambar 2.7. Menu yang paling sering Dipesan Penjelasan: Prosedur ini bernama MenuLaris. Sama seperti prosedur sebelumnya , prosedur ini juga menggunakan handler rollback untuk menangani bila terjadi error, warning dan proses-proses yang abnormal atau jika terdapat eksepsi atau warning maka kondisi database akan dikembalikan ke kondisi semula. Baris perintah SELECT NamaMenu, SUM(Banyak) AS 'JumlahPemesanan' FROM detailpesan, ini merupakan perintah untuk menampilkan nama menu dari tabel detail pesan dengan nama field yang baru Jumlah Pemesanan. SUM(Banyak) digunakan untuk menjumlah field banyak untuk mengetahui nama menu yang paling sering dipesan pada tabel detail pesan. Baris perintah GROUP BY NamaMenu ORDER BY JumlahPemesanan DESC LIMIT 1;, merupakan lanjutan perintah sebelumnya. Artinya adalah akan ditampilkan field nama menu pada field yang baru yaitu Jumlah Pemesanan dengan diurutkan dari yang paling besar ke kecil. Namun yang ditampilkan hanya 1 record saja atau dengan kata lain nama menu yang paling sering dipesan. Untuk memanggil procedure diatas digunakan perintah CALL MenuLaris(); Tampilan outputnya yaitu : Gambar 2.8. Menu paling sering Dipesan 8 Gambar 2.9. Menu dengan Harga paling Mahal Penjelasan : Prosedur ini bernama MenuMahal. Memiliki jenis handling rollback seperti prosedur lainnya yang akan mengembalikan database ke kondisi semula bila terjadi error. Baris perintah SELECT NamaMenu,Harga FROM menu GROUP BY harga DESC LIMIT 1;, ini merupakan perintah untuk menampilkan nama menu dan harga dari tabel menu. Dimana tampilannya akan diurutkan dari yang paling besar ke kecil, tetapi hanya akan ditampilkan 1 record saja atau hanya akan ditampilkan nama menu dengan harga yang paling mahal. Untuk memanggil procedure diatas digunakan perintah CALL MenuMahal(); Tampilan outputnya yaitu : Gambar 2.10. Menu paling Mahal BAB IV KESIMPULAN Berdasarakan hasil praktikum yang telah dilakukan untuk menangani bila terjadi error, warning dan proses-proses yang abnormal maka dapat di lakukan perintah ROLLBACK, atau jika terdapat eksepsi atau warning maka kondisi database akan dikembalikan ke kondisi semula. Perintah Commit digunakan untuk menyimpan perubah secara fisik ke database. 9 DAFTAR PUSTAKA Dendi,Riyadi . 2009 . MySQL Transaction. http://dendieisme.blogspot.co.id/2009/04/mysql-transaction.html (Diakses 6 November 2017) 10 LAMPIRAN 1. HitungTotal Gambar 5.1. HitungTotal 2. HitungTotalPembayaran Gambar 5.2. HitungTotalPembayaran 3. HitungDiskon Gambar 5.3. HitungDiskon 4. Menu paling Laris Gambar 5.4. Menu paling Laris 5. Menu paling Mahal Gambar 5.5. Menu paling Mahal 11