Pada Bagian 5, kita telah belajar tentang relasi antar tabel serta cara menghubungkan data menggunakan Primary Key dan Foreign Key. Di bagian belajar SQL database bagian 6 ini, kita akan melanjutkan ke topik baru yang tak kalah penting dalam pengelolaan database, yaitu transaksi di MySQL.
Fitur transaksi ini membantu kita menjalankan beberapa perintah SQL sekaligus dalam satu proses yang utuh. Jika semua perintah berhasil, maka perubahan disimpan ke database. Namun, jika ada satu saja yang gagal, maka semua perubahan dapat dibatalkan.
Fitur ini sangat penting agar data tetap aman dan konsisten, terutama pada aplikasi yang menangani banyak operasi secara bersamaan, seperti sistem keuangan atau toko online.
Apa Itu Transaksi di MySQL?
Secara sederhana, transaksi adalah rangkaian proses yang berisi beberapa perintah SQL yang dijalankan secara bersamaan. Contohnya bisa dilihat pada proses restok barang di toko online.
Ketika admin menambahkan stok barang baru, sistem biasanya melakukan dua hal:
- Menambah jumlah stok di tabel produk.
- Menyimpan riwayat restok ke tabel log_stok.
Kedua langkah ini harus berhasil secara bersamaan. Jika salah satu gagal, misalnya log tidak tersimpan, maka sebaiknya stok juga tidak berubah. Tujuannya agar data tetap konsisten antara jumlah barang dan catatan restoknya.
Dalam MySQL, transaksi dijalankan dengan tiga perintah utama berikut:
- START TRANSACTION atau BEGIN
- COMMIT
- ROLLBACK
Sifat Transaksi (ACID)
Transaksi dalam database memiliki empat sifat utama yang dikenal dengan istilah ACID:
- Atomicity: Semua operasi harus berhasil semua, atau dibatalkan semua jika ada error.
- Consistency: Setelah transaksi selesai, data di database harus tetap valid sesuai aturan yang berlaku.
- Isolation: Transaksi berjalan terpisah dari transaksi lain.
- Durability: Setelah disimpan (commit), perubahan akan tersimpan permanen walaupun server mengalami gangguan.
Keempat sifat ini memastikan data tetap aman dan tidak rusak walaupun ada error di tengah proses.
Mode Autocommit di MySQL
Secara default, MySQL akan langsung menyimpan setiap perubahan (autocommit aktif). Artinya, setiap kali Anda menjalankan INSERT, UPDATE, atau DELETE, hasilnya langsung tersimpan.
Namun, saat ingin menjalankan beberapa query sekaligus dalam satu proses transaksi, mode autocommit perlu dinonaktifkan dengan perintah berikut:

Setelah itu, MySQL tidak akan langsung menyimpan perubahan sampai Anda menjalankan COMMIT.
Perintah Dasar Transaksi di MySQL
Berikut adalah tiga perintah utama untuk mengelola transaksi:
| Perintah | Fungsi |
| START TRANSACTION / BEGIN | Memulai transaksi baru |
| COMMIT | Menyimpan semua perubahan ke database |
| ROLLBACK | Membatalkan perubahan dan mengembalikan ke kondisi awal |
Contoh:
Misalkan Anda memiliki dua tabel seperti berikut pada transaksi restok barang:
Tabel produk :

Tabel log_stok:

Ketika admin menambahkan 10 unit Keyboard baru, sistem akan menambah stok sekaligus mencatat log restok.

Berikut hasilnya:

Jika di tengah proses terjadi error (misalnya query INSERT gagal karena kolom tidak sesuai), Anda bisa membatalkan seluruh transaksi dengan perintah:

BACA JUGA: Contoh Database Penjualan Barang Berbasis MySQL
Menggunakan SAVEPOINT untuk Rollback Parsial
Dalam beberapa kasus, Anda mungkin tidak ingin membatalkan seluruh transaksi, tapi hanya sebagian saja. Misalnya saat proses restok, stok sudah berhasil ditambah, tapi Anda ingin membatalkan update harga yang salah input. Untuk itu, Anda bisa menggunakan SAVEPOINT.

Pada contoh di atas, perubahan stok tetap disimpan, tetapi perubahan harga dibatalkan karena Anda melakukan rollback ke SAVEPOINT. Berikut screenshot hasilnya:

Hal yang Perlu Diperhatikan
- Pastikan tabel menggunakan InnoDB, karena engine MyISAM tidak mendukung transaksi.
- Beberapa perintah DDL seperti CREATE TABLE atau ALTER TABLE akan otomatis melakukan implicit commit, yang akan mengakhiri transaksi sebelumnya.
- Hindari transaksi yang terlalu panjang, karena bisa menyebabkan lock pada tabel dan memperlambat query lain.
- Pastikan setiap transaksi selalu ditutup dengan COMMIT atau ROLLBACK agar koneksi database tidak menggantung.
Tips dan Best Practice
- Gunakan transaksi untuk operasi penting yang melibatkan banyak query.
- Buat transaksi sesingkat mungkin untuk menghindari deadlock.
- Jika menggunakan framework atau ORM, pahami bagaimana mereka menangani transaksi otomatis.
- Tambahkan logging untuk memantau kapan transaksi gagal atau berhasil di commit.
Penutup
Transaksi di MySQL berfungsi untuk menjaga agar data tetap aman dan konsisten, terutama ketika ada banyak operasi yang dijalankan sekaligus. Dengan memahami cara kerja start transaction, commit, rollback, hingga savepoint, Anda bisa mengelola data dengan lebih aman dan terkontrol.
Fitur ini sangat penting diterapkan pada sistem yang sensitif terhadap data seperti toko online, sistem kasir, hingga aplikasi keuangan.
Demikian tutorial belajar SQL Database bagian ke 6 tentang mengelola transaksi data di MySQL. Ikuti terus belajar SQL database dari Rumahweb untuk meningkatkan kemampuan kelola database Anda. Semoga bermanfaat.


