Tutorial PHP – MySQL : Control Transaction MySQL
A Transaction Control Language (TCL) adalah bahasa komputer dan subset SQL, digunakan untuk mengontrol pemrosesan transaksi dalam database. unit logis dari pekerjaan yang terdiri dari satu atau lebih pernyataan SQL, biasanya sekelompok pernyataan DML. Contoh perintah TCL meliputi:
- COMMIT to apply the transaction by saving the database changes.
- ROLLBACK to undo all changes of a transaction.
- SAVEPOINT to divide the transaction into smaller sections. It defines breakpoints for a transaction to allow partial rollbacks.
Sebetulnya, apa fungsi atau kegunaan Control Transaction pada database ?, satu kasus kita coba ambil. Satu ketika saat kita mencoba memasukan data yang cukup besar atau memasukan data dengan berbagai macam algoritma didalam aplikasi, dimana satu data dalam table terkait dengan table yang lain, terjadi putus nya koneksi antara aplikasi dan database yang menyebabkan hanya sebagian data yang masuk. Ini berakibat data tidak akan valid atau bahkan kerusakan pada database.
Bagaimana kita mengakali nya ? sehingga tidak terjadi hal semacam itu ? Kasarnya “MASUK, MASUK SEMUA” atau TIDAK SAMA SEKALI atau BATALKAN SELURUHNYA. Salah satu caranya dengan Control Transaction, disinilah TCL beraksi, selain mengeluarkan error handling yang bersih data pun tidak akan berakibat invalid.
Bagaimana kita mengimplementasikan hal tersebut ? OK, kita akan coba buat dengan environment PHP dan MySQL. Langkah-langkahnya adalah sebagai berikut.
- Buat 1 Database
- Buat 1 Table
- Buat 1 scalar function
- Buat 1 Stored Procedure dengan Control Transaction didalamnya.
- Panggil oleh Aplikasi (PHP)
DATABASE dan TABLE
-- buat database
CREATE DATABASE ci_travel;
-- buat table
CREATE TABLE `tref_manufaktur` (
`manufakturID` VARCHAR(8) NOT NULL,
`manufakturNama` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`manufakturID`)
)
COMMENT='Contoh : Toyota, Honda, Volkwagen dll'
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
-- Masukan beberapa Data
INSERT INTO `tref_manufaktur` (`manufakturID`, `manufakturNama`) VALUES
('M01', 'Toyota'),
('M02', 'Honda'),
('M03', 'Suzuki');
Data yang dihasilkan adalah berikut
| manufakturID | manufakturNama |
|
|
|
| M01 | Toyota |
| M02 | Honda |
| M03 | Suzuki |
SCALAR FUNCTION
kita gunakan scalar function untuk menampung sintak insert, mengapa kita gunakan scalar function ? ini adalah salah satu cara untuk mengembalikan nilai hasil proses insert, selain itu function dilengkapi dengan penampungan return value. Disini kita membuat 1 function fn_insert_manufaktur(,), dimana param1 dan param2 adalah data yang dibutuhkan untuk proses entry data.
DELIMITER $$
DROP FUNCTION IF EXISTS `fn_insert_manufaktur`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_insert_manufaktur`(`i_manufakturID` varchar(50),`i_manufakturNama` varchar(50)) RETURNS int(11)
MODIFIES SQL DATA
BEGIN
/* Declare Boolean-like variables as FALSE. */
DECLARE lv_return_value INT DEFAULT FALSE;
DECLARE lv_error_value INT DEFAULT FALSE;
/* Declare a generic exit handler to reset error control variable to true. */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET lv_error_value := TRUE;
/* Insert statement with auto commit enabled. */
INSERT INTO tref_manufaktur (tref_manufaktur.manufakturID,tref_manufaktur.manufakturNama) VALUES (i_manufakturID,i_manufakturNama);
/* True unless the CONTINUE HANDLER disables the error control variable. */
IF lv_error_value = FALSE THEN
SET lv_return_value := TRUE;
END IF;
/* Return local variable. */
RETURN lv_return_value;
END$$
STORED PROCEDURE
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_manufaktur_insert`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_manufaktur_insert`(IN `i_manufakturID` varchar(50),IN `i_manufakturNama` varchar(50))
BEGIN
#Routine body goes here...
/* Declare a control variable that manages transaction
success or failure. */
DECLARE lv_success_value INT DEFAULT FALSE;
/* Start a transaction context. */
START TRANSACTION;
/* Set a SAVEPOINT in the transaction context. */
SAVEPOINT before_transaction;
/* Call the function. */
SET lv_success_value := fn_insert_manufaktur(i_manufakturID,i_manufakturNama);
/* Check the status of the control variable, and commit
or rollback the transaction. */
IF lv_success_value = TRUE THEN
COMMIT;
SELECT 'OK' AS HASIL;
ELSE
ROLLBACK TO before_transaction;
SELECT 'NOK' AS HASIL;
END IF;
END$$
Sekarang Bagaimana cara Pemanggilannya ? Buat 1 File php dengan script sebagai berikut :
@mysql_connect("localhost","user", "password") or die(mysql_error());
@mysql_select_db("ci_travel") or die(mysql_error());
$query = "CALL sp_manufaktur_insert('M04','DATA BARU')";
$result = @mysql_query($query);
Data yang baru :
Data yang dihasilkan adalah berikut
| manufakturID | manufakturNama |
|
|
|
| M01 | Toyota |
| M02 | Honda |
| M03 | Suzuki |
| M04 | KAWASAKI |
SELAMAT MENCOBA ![]()

Comments
Powered by Facebook Comments
Salam kenal
Mohon dijelaskan penulisannya dalam program php.
terimakasih.