在資料庫操作中,事務確保一組 SQL 語句要么全部成功,要么全部失敗,維護資料一致性。本文透過 PHP 操作 MySQL 示範事務的啟動、回滾與提交流程。
START TRANSACTION、ROLLBACK、COMMIT 各只能出現一次COMMIT,所有操作雖執行但不生效;下一段事務啟動時會自動提交上一段<?php
// 資料庫連線
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $conn);
mysql_query("SET NAMES GBK");
/* 事務開始 */
mysql_query('START TRANSACTION');
$isBad = 0;
// 第一筆插入
$ins_testTable1 = "INSERT INTO testtable1(NAME,age) VALUES('first',23)";
if (!mysql_query($ins_testTable1)) {
$isBad = 1;
}
// 第二筆插入(故意寫錯欄位名 ages)
$ins_testTable2 = "INSERT INTO testtable1(NAME,ages) VALUES('second','24')";
if (!mysql_query($ins_testTable2)) {
$isBad = 1;
}
/* 根據執行結果決定提交或回滾 */
if ($isBad == 1) {
echo $isBad;
mysql_query('ROLLBACK');
}
mysql_query('COMMIT');
mysql_close($conn);
?>
$isBad 旗標記錄任一 SQL 失敗ROLLBACK,兩筆資料均不寫入mysql_close() 關閉連線注意:mysql_* 函式已棄用,現代專案建議改用 PDO 或 MySQLi 的事務方法(beginTransaction()、rollBack()、commit())。