Apa itu Transaksi
Transaksi dalam dunia database adalah unit kerja yang dieksekusi sebagai operasi tunggal dan atomik. Ini adalah urutan logis dari satu atau lebih manipulasi data, dibungkus sebagai unit yang koheren dan dapat diandalkan. Transaksi mengikuti properti ACID. Transaksi memastikan bahwa urutan operasi ini dieksekusi sepenuhnya atau tidak sama sekali, dan perubahan yang dilakukan dalam transaksi disimpan secara permanen.
Memulai Transaksi: BEGIN atau START TRANSACTION
Transaksi dalam MySQL dimulai dengan penggunaan perintah BEGIN
atau START TRANSACTION
. Pilihan antara kedua perintah ini lebih pada preferensi pribadi dan keterbacaan dalam skrip SQL Anda. Ketika perintah-perintah ini diberikan, MySQL memulai blok transaksi baru dan semua perintah berikutnya akan menjadi bagian dari blok ini hingga selesai.
Mengakhiri Transaksi: COMMIT
Perintah COMMIT
digunakan untuk mengakhiri blok transaksi. Perintah ini membuat semua perubahan yang dilakukan dalam transaksi saat ini menjadi permanen. Setelah eksekusi perintah ini, tidak ada rollback yang dapat dilakukan. Penggunaan perintah COMMIT
menandakan akhir yang sukses dari sebuah transaksi.
Menghentikan Transaksi: ROLLBACK
Di sisi lain, jika Anda ingin menghentikan transaksi tanpa membuat perubahan menjadi permanen, Anda dapat menggunakan perintah ROLLBACK
. Perintah ini mengembalikan semua perubahan yang dilakukan dalam transaksi saat ini. Dengan kata lain, ini seolah-olah transaksi tidak pernah terjadi. Ini berguna dalam kasus ketika Anda menghadapi kesalahan atau masalah di tengah transaksi dan ingin mengembalikan ke keadaan sebelum transaksi dimulai.
Operasi ROLLBACK
Saya akan menjelaskan bagaimana perintah ROLLBACK
berfungsi dalam transaksi MySQL. Untuk mengilustrasikannya, kita akan menggunakan contoh sederhana yang melibatkan perubahan pada tabel users
.
Keadaan Sebelum Transaksi
Pertimbangkan contoh gambaran tabel users
berikut:
mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Jane |
| 3 | Jack |
+----+------+
3 rows in set (0.00 sec)
Di sini, kita memiliki sebuah tabel dengan tiga pengguna: John, Jane, dan Jack.
Memulai dan Melaksanakan Transaksi
Sekarang, mari mulai sebuah transaksi dengan niat untuk mengubah nama pengguna dengan id = 1
:
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> UPDATE `users` SET `name` = "James" WHERE `id` = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Pada titik ini, dalam transaksi kita, kita telah mengubah nama John menjadi James.
Menghentikan Transaksi dengan ROLLBACK
Misalkan kita menghadapi masalah atau berubah pikiran tentang pembaruan ini. Kita dapat menghentikan transaksi tanpa melakukan commit pada perubahan tersebut:
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
Perintah ROLLBACK
akan mengembalikan semua perubahan yang dilakukan dalam transaksi saat ini.
Memverifikasi Keadaan Setelah ROLLBACK
Setelah transaksi di-rollback, kita dapat memverifikasi bahwa tabel pengguna telah kembali ke keadaan awal:
mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Jane |
| 3 | Jack |
+----+------+
3 rows in set (0.00 sec)
Seperti yang dapat kita lihat, nama pengguna telah kembali menjadi John, yang menunjukkan efek perintah ROLLBACK
dalam membatalkan perubahan yang dilakukan dalam transaksi.
Operasi COMMIT
Sekarang, saya akan menunjukkan perintah COMMIT
dalam transaksi MySQL. Mari lanjutkan dengan contoh tabel users
untuk memahami operasi ini dengan lebih baik.
Keadaan Sebelum Transaksi
Berikut adalah keadaan awal tabel users
:
mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Jane |
| 3 | Jack |
+----+------+
3 rows in set (0.00 sec)
Kita memiliki tiga pengguna dalam tabel ini: John, Jane, dan Jack.
Memulai dan Melaksanakan Transaksi
Sekarang, kita akan memulai transaksi dengan niat untuk mengubah nama pengguna dengan id = 1
:
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE `users` SET `name` = "James" WHERE `id` = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Dalam lingkup transaksi kita, kita telah mengubah nama John menjadi James.
Mengakhiri Transaksi dengan COMMIT
Jika kita puas dengan perubahan ini dan ingin membuatnya permanen, kita dapat mengakhiri transaksi dengan COMMIT
:
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
Perintah COMMIT
memiliki efek membuat semua perubahan yang dilakukan dalam transaksi saat ini menjadi permanen.
Memverifikasi Keadaan Setelah COMMIT
Sekarang, mari verifikasi keadaan tabel users
setelah transaksi:
mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
| 1 | James |
| 2 | Jane |
| 3 | Jack |
+----+------+
3 rows in set (0.00 sec)
Seperti yang dapat kita amati, nama pengguna telah diperbarui menjadi James. Ini menunjukkan efek operasi COMMIT
, yang secara permanen menerapkan perubahan yang dilakukan dalam transaksi.