Penggunaan fungsi COMITT pada PHP

Penggunaan fungsi COMITT pada PHP

Transaction tujuan utamanya untuk mencegah kepincangan data.Transaction berguna jika kita punya proses yang menggunakan lebih dari satu table atau proses.Jika hanya satu tidak perlu.

Contohnya : kasus toko online order barang.

Kita punya 2 tabel Order dan OrderDetail. Pada saat mengorder barang pastinya kita akan menyimpan data header di tabel Order, dan Detail di tabel OrderDetail.

Nah jika terjadi error disaat insert data ke tabel OrderDetail sudah pasti ada kepincangan data dimana ada data Order tanpa data OrderDetail.

Transaction membantu kita mencegah itu terjadi.Ketika terjadi gagal insert dia akan mengembalikan data seperti semula,jadi data header yang di tabel Order juga terhapus otomatis.Agar lebih mudah dimengerti lihat code dibawah

Ini adalah contoh kode php normalnya.


$koneksi = new mysqli('localhost','root','root','tokoonline');
$koneksi->begin_transaction();
$order = $koneksi->query("insert into orders (nama,total) values ('nama1',50000)");
$order_id = $koneksi->insert_id;
$order_detail = $koneksi->query("insert into orderdetails (order_id,barang,harga) values ($order_id,'baju',5000)");
if(!$order_detail){
	$koneksi->rollback();
}else{
	$koneksi->commit();		
}
?>

Kode diatas pada baris kedua bisa dilihat syntax begin_transaction.

Begin_transaction() menandakan titik awal mulai mendeklarasikan transaction kita.Mulai dari sini semua kode insert kita tidak akan berjalan sampai perintah commit() dilakukan.

Pada saat insert ke table orderdetail, saya sengaja menyalahkan nama tabelnya menjadi orderdetail1 ,lalu kita check apakah berhasil insert jika gagal kita jalankan rollback().

Rollback() berguna untuk mengembalikan ke posisi saat begin_transaction().

Kalau insert berhasil kita jalankan commit().Commit() juga berguna untuk menandakan akhir dari transaction kita.

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.

Table of Contents

  • Cara Menggunakan Perintah COMMIT MySQL
  • Cara Menggunakan Perintah ROLLBACK MySQL
  • Apakah fungsi dari perintah commit?
  • Apa yang dimaksud dengan commit?
  • Apa itu MySQL transaction?
  • Apakah fungsi dari savepoint dalam transaction?

Di MySQL, transaction dimulai dengan pernyataan START TRANSACTION dan diakhiri dengan pernyataan COMMIT atau ROLLBACK, serta dapat mengatur SET autocommit menjadi ya atau tidak.

  • START TRANSACTION memulai sebuah transaction baru.
  • COMMIT perintah COMMIT digunakan untuk menyimpan transaksi secara permanen di database.
  • ROLLBACK Perintah ROLLBACK digunakan untuk mengembalikan database ke bentuk awal.
  • SET autocommit menonaktifkan atau mengaktifkan mode COMMIT otomatis pada sesi saat ini.

Cara Menggunakan Perintah COMMIT MySQL

Perintah COMMIT digunakan untuk menyimpan transaksi secara permanen di database.

Dengan menggunakan TRANSACTION saat melakukan perintah seperti INSERT, UPDATE, DELETE maka traksaksi sebenarnya belum dilakukan secara permanen. Artinya operasi tersebut masih bisa di rollback / di batalkan.

Kapan perintah COMMIT dibutuhkan?

Dalam sebuah rangkaian operasi data, jika ada 1 atau lebih operasi yang mengalami kegagalan maka kita akan mengembalikan seperti ke bentuk semula. Jika tidak ada kesalahan maka seluruh rangkaian pernyataan akan di – COMMIT untuk menyimpan transaksi secara permanen.

Sekarang kita uji coba pada tabel pegawai berikut ini:

INSERT INTO pegawai 
VALUES 
(93032000,"arie","Payakumbuh Utara"),
(93032100,"alid","Payakumbuh Selatan"),
(93032200,"halwa","Payakumbuh Barat"),
(93032300,"aldam","Payakumbuh Timur");

Selanjutnya kita cek data pegawai yang telah diinputkan:

> SELECT * FROM pegawai;
+----------+-------+--------------------+
| nip      | nama  | alamat             |
+----------+-------+--------------------+
| 93032000 | arie  | Payakumbuh Utara   |
| 93032100 | alid  | Payakumbuh Selatan |
| 93032100 | halwa | Payakumbuh Barat   |
| 93032300 | aldam | Payakumbuh Timur   |
+----------+-------+--------------------+
4 rows in set (0.00 sec)

Untuk memulai menggunakan COMMIT harus dimulai dengan START TRANSACTON

> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

> INSERT INTO pegawai VALUES (93032400,"cesa","Payakumbuh Tengah");
Query OK, 1 row affected (0.00 sec)

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

> SELECT * FROM pegawai;
+----------+-------+--------------------+
| nip      | nama  | alamat             |
+----------+-------+--------------------+
| 93032000 | arie  | Payakumbuh Utara   |
| 93032100 | alid  | Payakumbuh Selatan |
| 93032100 | halwa | Payakumbuh Barat   |
| 93032300 | aldam | Payakumbuh Timur   |
| 93032400 | cesa  | Payakumbuh Tengah  |
+----------+-------+--------------------+
5 rows in set (0.00 sec)

Maka data pegawai sudah tersimpan secara permanen dan tidak dapat di ROLLBACK / dibatalkan.

Cara Menggunakan Perintah ROLLBACK MySQL

Perintah COMMIT dan ROLLBACK saling berkaitan. Perintah ROLLBACK digunakan untuk mengembalikan data pada database ke bentuk awal.

Kapan perintah ROLLBACK dibutuhkan?

Dalam sebuah rangkaian operasi data, jika ada 1 atau lebih operasi yang mengalami kegagalan maka kita akan mengembalikan seperti ke bentuk semula menggunakan perintah ROLLBACK.

Untuk menggunakan COMMIT / ROLLBACK harus dimulai dengan START TRANSACTON

> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

> SELECT * FROM pegawai;
+----------+-------+--------------------+
| nip      | nama  | alamat             |
+----------+-------+--------------------+
| 93032000 | arie  | Payakumbuh Utara   |
| 93032100 | alid  | Payakumbuh Selatan |
| 93032100 | halwa | Payakumbuh Barat   |
| 93032300 | aldam | Payakumbuh Timur   |
| 93032400 | cesa  | Payakumbuh Tengah  |
+----------+-------+--------------------+
5 rows in set (0.00 sec)

> DELETE FROM pegawai WHERE nip="93032400";
Query OK, 1 row affected (0.00 sec)

> SELECT * FROM pefawai;
+----------+-------+--------------------+
| nip      | nama  | alamat             |
+----------+-------+--------------------+
| 93032000 | arie  | Payakumbuh Utara   |
| 93032100 | alid  | Payakumbuh Selatan |
| 93032100 | halwa | Payakumbuh Barat   |
| 93032300 | aldam | Payakumbuh Timur   |
+----------+-------+--------------------+
4 rows in set (0.00 sec)

> ROLLBACK;
Query OK, 0 rows affected (0.11 sec)

> SELECT * FROM pegawai;
+----------+-------+--------------------+
| nip      | nama  | alamat             |
+----------+-------+--------------------+
| 93032000 | arie  | Payakumbuh Utara   |
| 93032100 | alid  | Payakumbuh Selatan |
| 93032100 | halwa | Payakumbuh Barat   |
| 93032300 | aldam | Payakumbuh Timur   |
| 93032400 | cesa  | Payakumbuh Tengah  |
+----------+-------+--------------------+
5 rows in set (0.00 sec)

Perhatikan query di atas, dengan menggunakan perintah ROLLBACK data pegawai yang sudah di hapus dapat dikembalikan.

Maka sampai disini kita telah berhasil belajar Cara menggunakan Perintah START TRANSACTION, COMMIT, dan ROLLBACK pada MySQL.

Baca Juga:
Install MySQL 8 Debian

Apakah fungsi dari perintah commit?

Dengan menggunakan COMMIT, kita dapat mengakhiri semua transaksi dan menjadikannya sebagai perubahan permanen.

Apa yang dimaksud dengan commit?

Arti kata "commit" Bahasa Inggris dalam Bahasa Indonesia. kkt. (committed) 1 melakukan. 2 menjalankan, berbuat. 3 memasukkan.

Apa itu MySQL transaction?

Transactions adalah sekelompok operasi sekuensial untuk memanipulasi data dalam database, yang dilakukan seolah-olah merupakan satu unit kerja tunggal. Dengan kata lain, transations akan berhasil jika setiap operasi individu dalam grup juga berhasil.

Apakah fungsi dari savepoint dalam transaction?

Sebuah savepoint adalah perintah di dalam transaksi Oracle yang memungkinkan semua perintah yang dijalankan setelah dibuat untuk di Rollback pada titik transaksi tertentu. Kita dapat membatalkan seluruh perubahan data DML yang masih menggantung dengan menggunakan statement ROLLBACK.