Transaction adalah fitur sistem manajemen basis data (DBMS) yang membantu pemulihan data pada kesalahan internal. Transaction pada basis data adalah kumpulan kueri yang harus dieksekusi sehingga jika salah satu eksekusi kueri gagal, eksekusi kueri Anda akan kembali ke awal. Transaction adalah mekanisme yang memungkinkan untuk menginterpretasikan beberapa perubahan pada database dengan satu operasi.
MySQL mendukung beberapa mesin penyimpanan. InnoDB sepenuhnya sesuai ACID. ACID adalah singkatan dari Atomicity, Consistency, Isolasi dan Durability. Transaction yang andal harus mendukung keempat properti ini.
Di MySQL, transaction dimulai dengan pernyataan BEGIN WORK dan diakhiri dengan pernyataan COMMIT atau ROLLBACK. Perintah SQL antara pernyataan awal dan akhir membentuk sebagian besar transaction.
Ketika transaction berhasil diselesaikan, perintah COMMIT harus dilakukan sehingga perubahan pada semua tabel yang terlibat akan berlaku.
Jika kegagalan terjadi, perintah ROLLBACK harus dilakukan untuk mengembalikan setiap tabel yang direferensikan dalam transaction ke keadaan sebelumnya.
Anda dapat mengontrol perilaku transaction dengan menetapkan variabel sesi yang disebut AUTOCOMMIT. Jika AUTOCOMMIT diatur ke 1 (default), maka setiap pernyataan SQL (dalam suatu transaction atau tidak) dianggap sebagai transaction yang lengkap dan dilakukan secara default ketika selesai.
Ketika AUTOCOMMIT diatur ke 0, dengan mengeluarkan perintah SET AUTOCOMMIT = 0, rangkaian pernyataan selanjutnya bertindak seperti transaction dan tidak ada aktivitas yang dilakukan sampai transaction pernyataan COMMIT yang eksplisit dilakukan.
Berikut ini tutorial sederhana menggunakan transaction.
Buat table tb_productÂ
1 2 3 4 5 6 |
CREATE TABLE tb_product ( productID int(5) NOT NULL AUTO_INCREMENT, productName varchar(100) NOT NULL, stock int(5) NOT NULL, PRIMARY KEY (productID) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
Kemudian coba tambahkan 1 record, misalnya
1 |
INSERT INTO `tb_product`(productName, stock) VALUES('baju merah',10); |
Buat table tb_purchase
1 2 3 4 5 6 |
CREATE TABLE tb_purchase ( purchaseID int(5) NOT NULL AUTO_INCREMENT, productID int(100) NOT NULL, quantity int(5) NOT NULL, PRIMARY KEY (purchaseID) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
Kemudian tambahkan foreign key di tb_purchase
1 |
ALTER TABLE `tb_purchase` ADD FOREIGN KEY (productID) REFERENCES tb_product(productID) |
Query berikut ini akan menyimpan semua perintah untuk 2 table yang telah kita buat sebelumnya.
1 2 3 4 |
START TRANSACTION; INSERT INTO `tb_purchase`(productID, quantity) VALUES(1,3); UPDATE `tb_product` SET stock = stock - 3 WHERE productID = 1; COMMIT; |
Setelah mengeksekusi query di atas, kita bisa lihat di database ada penambahan record di table tb_purchase dan kemudian ada update record tb_product.
Jika ada sesuatu hal atau kegagalan dalam sistem, kita bisa menggunakan perintah ROLLBACK untuk mengembalikan ke situasi semula sebelum query di eksekusi, contoh query-nya.
1 2 3 4 |
START TRANSACTION; INSERT INTO `tb_purchase`(productID, quantity) VALUES(1,1); UPDATE `tb_product` SET stock = stock - 1 WHERE productID = 1; ROLLBACK; |
Untuk query di atas, sebenarnya perintah insert dan update sudah siap untuk di eksekusi. Karena adanya perintah ROLLBACK, maka dua perintah tersebut tidak dieksekusi dan table dalam database kembali ke keadaan semula.
Untuk tutorial MySQL lainnya, silakan klik di sini.