TRANSAKSI (data base) DASAR TEORI Transaksi Basis Data Untuk mengilustrasikan kegiatan transaksi akan disampaikan kasus tentan...
TRANSAKSI (data base)
DASAR TEORI
Transaksi Basis Data
Untuk mengilustrasikan kegiatan transaksi akan disampaikan kasus tentang transfer antar rekening. Misalnya Tono akan mentransfer uang sebesar Rp. 6.000.000,- kepada adiknya Tini untuk keperluan membeli laptop baru, proses yang akan dilakukan yaitu :
- Saldo Tono akan dikurangi Rp. 6.000.000,-
- Saldo Tini akan ditambah 6.000.000,-
Namun, pertimbangkan jika diantara langkah 1 dan 2 terjadi hal – hal buruk yang tidak diinginkan, misalnya mesin ATM crash, listrik padam dan UPS gagal up, disk server penuh, atau ada cracker yang merusak infrakstruktur jaringan, bisa dipastikan saldo Tono berkurang tetapi saldo Tini tidak betambah ( sesuatu yang tidak diharapkan terjadi ).
Dari ilustrasi di atas, dapat disimpulkan bahwa solusi yang tepat adalah melakukan perintah – perintah sebagai satu kesatuan operasi. Secara sederhana, melakukan semua operasi atau tidak sama sekali biasanya dikenal dengan istilah all or nothing.
Konsep transaksi basis data sebenarnya sangat sederhana, yaitu : tandai bagian awal dan akhir himpunan perintah, dan putuskan di bagian akhir untuk mngeksekusi ( commit ) atau membatalkan ( rollback ) semua perintah.
Properti Transaksi Basis Data
Dalam transaksi basis data, terdapat properti – properti yang menjamin bahwa transaksi dilaksanakan dengan baik. Properti – properti ini dikenal sebagai ACID ( Atomicity, Consistency, Isolation, Durability ). Properti ACID untuk memastikan perilaku yang dapat diprediksi dan menguatkan peran transaksi sebagai konsep all or nothing, yang dirancang untuk mengurangi manajemen load ketika banyak variabel.
PEMBAHASAN
Dalam praktikum bab 4 ini akan membahas mengenai bagaimana konsep transaksi yang dilakukan sehari – hari untuk menyelesaikan operasi yang sensitif dengan menggunakan transaksi basis data MySQL. Dalam bab ini juga akan membahas langkah – langkah dalam mengatasi masalah yang terjadi saat melakukan transaksi dengan menggunakan transaksi basis data MySQL.
Transaksi di MySQL
MySQL mendukung transaksi dengan menggunakan storage engine InnoDB dan BDB. Maka untuk dapat mengimplementasikan DBMS MySQL harus mendukung salah satu atau kedua engine tersebut. Untuk memeriksa dukungan transaksi basis data kita dapat menggunakan perintah seperti beriktu ini.
mysql> show variables like ‘have_innodb’;
Jika perintah yang diketikkan di atas berhasil maka akan muncul tabel seperti berikut ini.
+----------------+------------+
| Variable_name | Value |
+----------------+------------+
| have_innodb | YES |
+----------------+------------+
1 rows in set (0.02 sec)
Apabila nilai kembalian adalah YES, maka dukungan pada transaksi basis data telah diaktifkan. Atau dengan demikian InnoDB akan menjadi engine default di MySQL.
Tabel Transaksi
Sebelum kita memulai transaksi maka langkah yang harus dibuat adalah membuat strutur tabel. Struktur tabel berikut seperti berikut.
mysql> CREATE TABLE coba_transak(pelatihan varchar(10)NOT NULL, instruktur char(15) NOT NULL, PRIMARY KEY(pelatihan)) ENGINE=InnoDB;
Query OK, 0 rows affected (0.10 sec)
Setelah mengetikkan struktur tabel seperti di atas dan setelah dijalankan OK, maka struktur tabel transaksi telah berhasil dibuat. Langkah berikutnya adalah mengimplementasikan Transaksi.
Implementasi Transaksi
Setelah membuat struktur tabel maka kita akan mengimplementasikan sebuah transaksi. Transaksi dalam MySQL diawali dengan START TRANSACTION dan diakhiri dengan COMMIT atau ROLLBACK. Commit digunakan untuk menyatakan transaksi yang dilakukan sukses, sedangkan Rollback digunakan untuk menyatakan transaksi yang dilakukan gagal. Langkah – langkah untuk melakukan transaksi sebagai berikut.
- langkah pertama yang harus dilakukan adalah mengaktifkan transaksi basis data, caranya sebagai berikut.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
- setelah mengaktifkan transaksi basis data dan transaksi tersebut berhasil diaktifkan maka langkah selanjutnya adalah menambahkan dua baris data ke table transak_jual yang telah dibuat sebelumnya.
mysql> insert into transak_jual values('LCD','LC','600000','1'),('MicroSD','MC',
'160000','2');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
- setelah kita menambahkan dua baris data ke dalam tabel transaksi_jual yang telah dibuat sebelumnya, maka untuk melihat hasil penambahan data telah berhasil atau belum dengan menggunakan perintah sebagai berikut.
mysql> select * from transak_jual;
Jika telah berhasil maka akan muncul tabel deperti berikut ini.
+----------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+----------+--------+--------+--------+
| LCD | LC | 600000 | 1 |
| MicroSD | MC | 160000 | 2 |
+----------+--------+--------+--------+
2 rows in set (0.00 sec)
jika telah diperiksa dan berhasil maka langkah selanjutnya yang dilakukan adalah jika ingin keluar dari terminal dengan menggunakan perintah berikut.
mysql> exit;
- maka setelah keluar maka login lagi ke dalam basis data yang sama. Kemudian periksa kembali isi tabel transak_jual dengan mengetikkan perintah sebagai berikut.
mysql> SELECT *FROM transak_jual;
Empty set (0.02 sec)
Maka hasilnya adalah isi tabel transak_jual kosong, karena tidak memberikan perintah commit pada saat akhir transaksi. Maka untuk mengatasi hal tersebut langkah yang harus dilakukan adalah sebelum keluar dari terminallangkah yang yang dilakukan adalah menuliskan pernyataan commit. Sintaknya adalah sebagai berikut.
mysql> COMMIT;
Query OK, 0 rows set (0.02 sec)
Setelah menuliskan sintak diatas jika kita login kembali ke dalam basis data yang sama maka hasilnya tidak akan kosong melainkan hasil yang telah kita inputkan ke dalam tabel transak_jual.
Model Autocommit
Selain menggunakan perintah start transaction, perintah lain dapat menggunakan perintah SET. Erintah ini digunakan untuk mengatur nilai variabel autocommit. Nilai default comit adalah 1, yang artinya bahwa transaksi basis data tidak aktif atau perintah akan langsung diterapkan secara permanen. Langkah mode autocommit adalah sebagai berikut.
a) Langkah pertama yang harus dilakukan adalah memeriksa nilai variabel autocommit dengan perintah sebagai berikut.
mysql> SELECT @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
maka akan secara langsung nilai autocommit adalah 1.
b) Setelah memeriksa nilai variabel dan mengetahui nilainya, langkah selanjutnya adalah menetapkan nilai autocommit menjadi 0 dengan kata lain menghidupkan transaksi atau transaksi on, dengan perintah sebagai berikut.
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
Maka sekarang transaksi telah on atau akrif.
c) Langkah selanjutnya adalah menambahkan baris data ke tabel basis data transak_jual, dengan menggunakan perintah sebagai berikut.
mysql> insert into transak_jual values('kabel HDSI','HD','10000','1');
Query OK, 1 row affected (0.00 sec)
d) Setelah menambahkan baris data dengan menuliskan perintah di atas dan sudah OK, maka langkah selanjutnya adalah melihta baris data yang baru saja ditambahkan, yaitu dengan perintah sebagai berikut.
mysql> select * from transak_jual;
+------------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+------------+--------+--------+--------+
| kabel HDSI | HD | 10000 | 1 |
| LCD | LC | 600000 | 1 |
| MicroSD | MC | 160000 | 2 |
+------------+--------+--------+--------+
3 rows in set (0.00 sec)
Maka data yang baru diinputan telah berhasil ditambahkan ke dalam tabel transak_jual.
e) Kemudian langkah selanjutnya adalah keluar dari prompt mysql, untuk mengetahui penambahan data login kembali dan periksa hasil penambahan data, jika benar maka penambahan data tidak diterapan secara permanen. Hasilnya adalah sebgai berikut.
mysql> use akademik;
Database changed
mysql> select * from transak_jual;
+------------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+------------+--------+--------+--------+
| kabel HDSI | HD | 10000 | 1 |
| LCD | LC | 600000 | 1 |
| MicroSD | MC | 160000 | 2 |
+------------+--------+--------+--------+
3 rows in set (0.00 sec)
Rollback Transaksi
Rollback digunakan untuk menggugurkan rangkaian perintah dalam suatu transaksi basis data. Rollback dilakukan jika ada satu atau lebih perintah gagal dijalankan. Rollback juga dapat dijalankan secara eksplisit. Langkah – langkahnya sebagai berikut.
a) Langkah pertama adalah mengaktifkan transaksi basis data dengan cara sebagai berikut.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.03 sec)
b) Kemudian setelah megaktifkan transaksi langkah selanjutnya adalah memeriksa nilai dalam tabel transak_jual. Perintahnya sebagai berikut.
mysql> select * from transak_jual;
+------------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+------------+--------+--------+--------+
| kabel HDSI | HD | 10000 | 1 |
| LCD | LC | 600000 | 1 |
| MicroSD | MC | 160000 | 2 |
+------------+--------+--------+--------+
3 rows in set (0.00 sec)
c) Langkah selanjutnya adalah menambahkan baris data ke dalam tabel transak_jual kembali, dengan mengetikkan perintah sebagai berikut.
mysql> insert into transak_jual values('kabel HDSI','HD','10000','1');
Query OK, 1 row affected (0.00 sec)
d) Langkah – langkah seanjutnya adalah memeriksa nilai yang terdapat di dalam tabel transak_jual. Perintahnya sebagai berikut.
mysql> select * from transak_jual;
+------------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+------------+--------+--------+--------+
| kabel HDSI | HD | 10000 | 1 |
| LCD | LC | 600000 | 1 |
| MicroSD | MC | 160000 | 2 |
+------------+--------+--------+--------+
3 rows in set (0.00 sec)
e) Kemudian setelah memeriksa langkah selanjutnya asalah berikan perintah roolback untuk membatalkan semua perintah. Perintahnya sebagai berikut.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.04 sec)
f) Setelah memberikan perintah rollback maka untuk melihat apa yang terjadi adalah dengan memeriksa tabel transak_jual dengan menggunakan perintah sebagai berikut.
mysql> select * from transak_jual;
+------------+--------+--------+--------+
| nama_brg | kd_brg | harga | jumlah |
+------------+--------+--------+--------+
| kabel HDSI | HD | 10000 | 1 |
| MicroSD | MC | 160000 | 2 |
+------------+--------+--------+--------+
2 rows in set (0.02 sec)
Yang terjadi setelah di rollback adalah baris data dari ‘LCD’,‘LC’,’600000’, ‘1’ menjadi hilang dari daftar di dalam tabel transak_jual. Pemanggilan start transaction yang tidak diakhiri dengan commit maka mengakibatkan dipanggilnya rollback secara implisit sehingga user tidak dapat memaksakan pembatalan menggunakan perintah rollbac tersebut.
COMMENTS