SAVEPOINT, ROLLBACK, ROLLBACK TO SAVEPOINT dan COMMIT

PR Pak Ridwan. Caption: Richard Juan
Wooah.. Aku kira hari ini pak Ridwan tidak memberikan PR. Padahal aku ingin sejenak bersantai minggu ini. Wkwkkwkw.. Dari informasi kecil yang kudapatkan dari teman- teman tentang PR Structure Database (SBD) hari jumat ini, pak dosen memberikan PR untuk mendokumentasikan sebuah percobaan pembuatan Query: Insert, Update atau Delete, yang mana langkah- langkah pembuatan query tersebut harus juga mempraktekan fungsi dari SAVEPOINT, ROLLBACK TO SAVEPOINT dan COMMIT. Sebelum beranjak lebih lanjut, karena ini tulisan tidak akan berguna bagi orang lain jika hanya dijelaskan setengah- setengah, berikut aku coba jelaskan tentang beberapa fungsi SAVEPOINT dan kawan- kawan nya.

ROLLBACK TO SAVEPOINT adalah sebuah fungsi untuk merestore tindakan yang kita lakukan pada SQL, namun pada titik tertentu. Hemmm.... biar mudah, akan ku beri sebuah contoh !. Anggap saja kamu mengetikan sebuah lirik lagu di Ms. Words. Kamu sudah mengetik sebanyak 12 baris. Kemudian, kamu menekan tombol undo 4 kali. Ketika kamu menekan tombol undo kali pertama, kamu akan melihat kalau lirik lagu di baris ke 12 menjadi hilang. Kamu tekan lagi tombol undo nya, lalu lirik pada baris ke 10 dan 11 menjadi hilang. Kamu menjadi gila, lalu kamu tekan lagi tombol undo nya, sehingga baris ke 7, 8 dan 9 menjadi hilang juga. Kamu lalu makin gila, lalu menekan lagi tombol undo nya sehingga semua tulisan mu hilang. Namun, ketika tadi kamu menulis lirik lagu pada baris ke 8, kamu menanamkan savepoint. Jadi, dengan cara memanggil perintah SAVEPOINT, maka kamu seakan- akan melakukan undo hingga baris ke 8 saja. Tindakan memanggil perintah Undo ke titik SAVEPOINT yang sudah kamu buat inilah, yang dinamakan dengan ROLLBACK TO SAVEPOINT.

SAVEPOINT adalah titik yang kamu buat agar ketika kamu memanggil perintah ROLLBACK TO SAVEPOINT, maka kamu akan sampai pada titik tersebut. Pada contoh diatas, SAVEPOINT dibuat pada baris ke-8.

ROLL BACK adalah semacam seperti UNDO. Dia akan membawa kamu kepada tindakan yang di lakukan sebelumnya. Bedanya dengan ROLLBACK TO SAVEPOINT, ROLLBACK "doank" ini hanya akan membawa mu pada satu langkah pada tindakan yang kamu lakukan sebelumnya. Yaaaaa, mirip dengan undo pada contoh diatas lah. Kalau kamu melakukan ROLLBACK, maka seakan- akan (dalam contoh diatas) kamu akan melihat kalau lirik lagu di baris ke 12 menjadi hilang.

PENGERJAAN TUGAS

Baik, sudah cukup berkicau nya. Saat nya mengerjakan tugas ini. Pak Ridwan (Dosen SBD) pertama- tama meminta untuk membuat 6 transaksi dengan menggunakan Query INSERT, UPDATE dan DELETE. Langsung saja, caranya:

Masuk ke sistem MySQL

  1. Buka XAMPP. Jangan lupa tekan tombol START pada module Apache dan MySQL.
  2. Buka browser, lalu ketika: localhost/phpmyadmin.
  3. buka CMD.
  4. Ketikan:
cd ..
cd ..
cd xampp
cd mysql
cd bin
mysql -u root


Kalau sukses, akan ada tulisan "Welcome to ....". Kalau ada tulisan error, maka kamu gak teliti pasti nulis nya. Jangan lupa, tulisan "cd.." diatas itu menggunakan titik sebanyak DUA. Hasil nya, bisa kamu lihat dibawah ini.


Membuat Database

Database yang mau ku buat adalah "willy the fox". Masih di CMD, ketikan lagi seperti ini:

create database willy_the_fox;
use willy_the_fox;

CATATAN: nama database nya terserah kamu ya. Jangan terpaku dengan contoh yang kuberikan diatas.

Hasilnya, bisa kamu lihat pada gambar dibawah ini...


Membuat Tabel

Tabel yang akan ku buat adalah nama_hewan_lucu. Untuk cara pembuatan nya, silakan ikuti langkah dibawah ini:

Create table hewan_lucu (
Kode Varchar (5) Not Null,
Nama Varchar (20) Not Null,
jumlah_kaki Integer Not Null,
Primary key (Kode)
);

Hasil nya seperti ini...




Query INSERT

Query INSERT yang akan saya buat menggunakan 7 buah data. Karena satu data nantinya akan ku hapus untuk penggunaan Query DELETE. Silakan gunakan kode dibawah ini:

INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("001","kucing","4");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("002","anjink","4");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("003","bebek","2");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("004","lipan","1000");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("005","laba_laba","12");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("006","ular","0");
INSERT INTO hewan_lucu (kode, nama, jumlah_kaki) Values ("007","kecoa","8");

Menampilkan hasil nya:

Select*From hewan_lucu;

Hasil nya, bisa Anda lihat dibawah ini..



Query UPDATE

Sesuai yang diperintahkan oleh Pak Dosen, aku perlu melakukan UPDATE pada data yang sudah kumasukan. Nah, dalam contoh ini, yang akan ku update adalah hewan "kecoa". Aku akan melakukan update "jumlah kaki" yang sebelumnya kecoa ini memiliki kaki 8, kini akan ku update menjadi berkaki- 2. Lihat hasil nya dibawah ini. Untuk itu, aku perlu menggunakan kode SQL berikut ini:

UPDATE hewan_lucu SET jumlah_kaki="2" where kode="007";

Tuh kan, kaki nya jadi 2 dan tangan nya jadi 5 XD


Canda BRO... XD, hasil nya yang sebenar nya dibawah ini ... wkwkwkkw



Query DELETE

Kali ini, kecoa nya akan ku hilangkan. Karena aku enggak suka kecoa, karena geli- geli gimana gitu ngelihat nya, maka akan ku hapus. Lihat hasil nya dibawah ini. Untuk itu, aku perlu menggunakan kode SQL berikut ini:

DELETE FROM hewan_lucu where kode="007";



Kalian lihat gambar diatas, hewan kecoa nya hilang !.

ROLLBACK

Rollback sistem kerja nya hanya seperti UNDO. Pada tahap sebelum nya, hewan lucu dengan nama "kecoa" sudah ku hapus. Sekarang saat nya mengembalikan (reanimation) lagi kecoa tersebut dari kematian nya. Oleh karena itu, aku harus menggunakan formula SQL berikut ini:

ROLLBACK;

Hasilnya bisa dilihat dibawah ini...



Revisi tentang Rollback
Eh, ternyata oh ternyata... setelah ku masukan SQL Rollback, kok masih gak bisa ya !. Hemmm....

Setelah mencari tahu selama 5 menit....

Ya, ketika aku menghapus "kecoa", ternyata setelah ku lakukan ROLLBACK, kecoa nya tidak muncul kembali. Kemudian, aku mendapat sumber informasi pemecahan masalah disini: http://stackoverflow.com/questions/2854359/rollback-not-working-in-mysql

Sebelum melakukan tindakan, baik itu INSERT, DELETE, UPDATE, aku harus memasukan kode SQL berikut ini:

SET autocommit=0;
START TRANSACTION; 

Setelah memasukan kode tersebut, aku kemudian melakukan DELETE kembali si kecoa tersebut lagi. Lantas, setelah ku panggil ROLLBACK nya, hasil nya SUKSES !!!... Wokawokawokawoka... Nih, lihat bukti hasil nya.



SAVEPOINT

Gunakan kode SQL berikut untuk membuat SAVEPOINT.
SAVEPOINT nama_savepoint;

Praktek:
SAVEPOINT willythefox_save1;



Penjelasan dan kesimpulan:
Savepoint adalah sebuah titik restore, dimana dengan menggunakan kode SQL ROLLBACK TO SAVEPOINT, kita bisa kembali kedalam keadaan ketika kita menyimpan SAVEPOINT tersebut. SAVEPOINT tidak bisa di eksekusi. Karena bersifat pasif, dan hanya bisa aktif jika ada perintah SQL yang lain (seperti ROLLBACK TO SAVEPOINT).

ROLLBACK TO SAVE POINT

Setelah membuat SAVEPOINT, saya akan menghapus dua buah hewan lucu yang saya miliki. Yaitu: Lipan dan Laba- laba. Perintah penghapusan ini adalah sebagai berikut:

DELETE FROM hewan_lucu where kode="005";
DELETE FROM hewan_lucu where kode="004";

Memanggil perintah ROLLBACK TO SAVEPOINT

ROLLBACK TO willythefox_save1;

HASIL NYA:


Penjelasan dan kesimpulan:
ROLLBACK TO SAVEPOINT berfungsi untuk melakukan restore ke dalam keadaan pada titik savepoint yang sudah kita buat sebelumnya.

COMMIT

Uji Coba: aku akan menghapus hewan "kecoa", kemudian aku beri perintah COMMIT.

DELETE FROM hewan_lucu where kode="007";
COMMIT;

Setelah itu, aku mencoba untuk melakukan ROLLBACK dan ROLLBACK TO SAVEPOINT. Kedua perintah tersebut tidak mendapatkan efek apapun!

ROLLBACK;
ROLLBACK to willythefox_save1;

HASIL:
ketika melakukan ROLLBACK, kemudian melakukan pengecekan hasil nya, ternyata tabel yang dibuat tidak kembali ke keadaan semula.


Ketika melakukan ROLLBACK TO SAVEPOINT, ternyata SAVEPOINT yang telah dibuat menjadi hilang.

SCREENSHOT HASIL:



Kesimpulan:
Fungsi COMMIT adalah untuk memutuskan bahwa tidak akan ada perubahan yang terjadi pada SQL yang telah kita buat. COMMIT kalau diartikan ke dalam bahasa Indonesia adalah "komitment", yang berarti; apapun hal yang terjadi, tidak akan berubah dan tetap berkomitmen dengan keputusan yang telah diambil.