Mengenal dan Membuat Savepoint di MySQL


Transaction Control Language (TCL) pada MySQL tidak hanya menyediakan perintah commit dan rollback akan tetapi juga adanya fitur savepoint, dengan adanya fitur savepoint memungkinkan kita untuk melakukan rollback ke savepoint yang kita tentukan, gambar diatas adalah ilustrasi dari penggunaan savepoint. Berikut adalah cara dan contoh menggunakan savepoint di MySQL:

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> Insert into mahasiswa (nama, npm, j_kelamin, t_lahir, alamat, kota, telepon, email) values
    -> (.... Dipersingkat... );
Records: 5  Duplicates: 0  Warnings: 0

mysql> select id_mhs, npm, nama from mahasiswa;
+--------+----------+----------------+
| id_mhs | npm      | nama           |
+--------+----------+----------------+
|      1 | 51411136 | AA Aditya A    |
|      2 | 51412371 | A Aditya A     |
|      3 | 51411111 | A Dimas A      |
|      4 | 51411112 | A Faisal Dimas |
|      5 | 51411113 | A Faridah Nur  |
+--------+----------+----------------+
5 rows in set (0.00 sec)

mysql> savepoint cekpoin1;
Query OK, 0 rows affected (0.00 sec)

Sampai disini kita telah membuat savepoint pertama dimana jika suatu waktu diharuskan untuk melakukan rollback ke savepoint ini.

mysql> update mahasiswa set npm = 51412343 where id_mhs = 5;
Query OK, 1 row affected (0.49 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> delete from mahasiswa where id_mhs = 4;
Query OK, 1 row affected (0.00 sec)

mysql> select id_mhs, npm, nama from mahasiswa;
+--------+----------+---------------+
| id_mhs | npm      | nama          |
+--------+----------+---------------+
|      1 | 51411136 | AA Aditya A   |
|      2 | 51412371 | A Aditya A    |
|      3 | 51411111 | A Dimas A     |
|      5 | 51412343 | A Faridah Nur |
+--------+----------+---------------+
4 rows in set (0.04 sec)

mysql> savepoint cekpoin2;
Query OK, 0 rows affected (0.00 sec)

Ini adalah savepoint ke dua yang dibuat jika suatu waktu perlu melakukan rollback ke savepoint ini.

mysql> delete from mahasiswa;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from mahasiswa
Empty set (0.00 sec)

mysql> savepoint cekpoin3;
Query OK, 0 rows affected (0.00 sec)

Sampai disini kita telah membuat tiga savepoint dengan kondisi terakhir tabel mahasiswa pada database adalah kosong, berikut contoh rollback dengan savepoint di mysql:

mysql> rollback to cekpoin2;
Query OK, 0 rows affected (0.00 sec)

mysql> select id_mhs, npm, nama from mahasiswa;
+--------+----------+---------------+
| id_mhs | npm      | nama          |
+--------+----------+---------------+
|      1 | 51411136 | AA Aditya A   |
|      2 | 51412371 | A Aditya A    |
|      3 | 51411111 | A Dimas A     |
|      5 | 51412343 | A Faridah Nur |
+--------+----------+---------------+
4 rows in set (0.04 sec)

Dengan demikian database akan mengembalika data berdasarkan savepoint yang ditentukan, kita dapat membuat savepoint sebanyak yang diperlukan dan dengan sendirinya savepoint akan terhapus ketika kita melakukan commit atau rollback, jangan lupa bahwa setiap kali transaksi di akhiri dengan commit atau rollback maka kita perlu menjalankan transaksi baru. 

Penamaan savepoint juga perlu diperhatikan karena memberi nama yang sama pada savepoint tidak akan memberikan pesan error melainkan akan mengganti savepoint dari nama sebelumnya dengan kondisi / transaksi terbaru sehingga perlu berhati-hati dalam memberi nama savepoint.
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama