Pengenalan Commit dan Rollback MySQL Lengkap

Image by Karolina Grabowska on Pexels
{tocify} $title={Daftar Isi}

Pendahuluan

Saat kita sedang melakukan aktivitas transaksi (DML) pada sebuah database baik itu insert, update ataupun delete mungkin suatu waktu kita dapat melakukan kesalahan tanpa disengaja, misalnya kita menghapus data yang tidak seharusnya dihapus dan lebih merepotkan lagi mungkin ada banyak data yang terhapus serta harus sesegera mungkin untuk dikembalikan sehingga tidak memungkinkan jika harus melakukan insert kembali. Dalam mencegah hal tersebut kita dapat mengandalkan perintah Transsaction Control Language (TCL), adapun daftar perintah yang tersedia sebagai TCL adalah sebagai berikut:

Command Deskripsi
Start Transaction Memulai sebuah transaksi
Commit Menyimpan kondisi terakhir pada sebuah database
Rollback Mengembalikan kondisi database saat terakhir melakukan commit

Commit dan Rollback

Adapun langkah atau cara untuk melakukan commit /  rollback di mysql adalah sebagai berikut:
  1. Mulai dengan menjalankan start transaction;
  2. Lakukan transaction (insert/update/delete)
  3. Jalankan commit jika ingin menyimpan perubahan
  4. Rollback jika sudah melakukan commit sebelumnya
  5. Mulai kembali langkah dari awal setelah melakukan commit atau rollback
Agar lebih mudah memahaminya, simak contoh berikut:

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> commit;
Query OK, 0 rows affected (0.12 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      |
|      4 | 51411112 | A Faisal Dimas |
|      5 | 51411113 | A Faridah Nur  |
+--------+----------+----------------+
5 rows in set (0.00 sec)

Sampai disini kita telah menyimpan kondisi terakhir database dan berlaku untuk semua tabel yang ada didalam database tersebut, sementara untuk melakukan rollback adalah sebagai berikut:

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

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> rollback;
Query OK, 0 rows affected (0.09 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      |
|      4 | 51411112 | A Faisal Dimas |
|      5 | 51411113 | A Faridah Nur  |
+--------+----------+----------------+
5 rows in set (0.00 sec)

Dengan demikian database akan kembali ke kondisi terakhir kali melakukan commit namun pastikan sebelum memulai transaksi, awali dengan start transaction diikuti dengan transaksi dan diakhiri dengan commit / rollback karena jika tidak maka kita tidak dapat melakukan rollback jika terjadi kesalahan kendati sebelumnya sudah melakukan commit.

Autocommit

Secara default mysql mengaktifkan autocommit sehingga kita baru bisa melakukan rollback setelah diawali dengan start transaction, kita bisa melakukan rollback tanpa diawali start transaction selama autocommit di non-aktifkan, contohnya sebagai berikut:

mysql> set autocommit = 0;
Query OK, 0 rows affected (0.05 sec)

mysql> delete from mahasiswa;
Query OK, 5 rows affected (0.12 sec)

mysql> select count(*) from mahasiswa;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.07 sec)

mysql> select count(*) from mahasiswa;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

Jika kalian memilih untuk menonaktifkan autocommit dan hendak menutup command-line maka saat selesai melakukan transaksi kalian perlu mengakhiri transaksi dengan perintah commit karena jika tidak, setiap transaksi yang sudah dilakukan akan di rollback kembali ketika menutup command line, autocommit akan kembali secara default ketika membuka command-line.

Commit dan Rollback DDL / Truncate

Tabel yang di truncate ataupun terhapus dengan perintah drop table (DDL) tidak dapat di commit dan rollback, perintah commit dan rollback hanya dapat dijalankan untuk transaksi DML saja, jika data tidak sengaja di truncate atau tabel terhapus dsb dengan perintah DDL maka satu-satunya cara untuk mengembalikan data adalah dengan menggunakan file backup jika sudah dibuat sebelumnya.
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