BEGIN; -- 或 START TRANSACTION;
-- SQL 語句...
COMMIT; -- 提交
-- 或
ROLLBACK; -- 回滾
僅將當前語句組作為一個事務,結束後自動恢復 autocommit=1。
SET autocommit = 0; -- 禁用自動提交
-- 後續所有 SQL 均在事務中
COMMIT; -- 提交並結束事務
-- 或
ROLLBACK; -- 回滾並結束事務
-- 注意:結束同時隱式開啟新事務
# my.ini 註釋掉 skip-innodb
# 重啟服務
# phpMyAdmin 執行 SHOW ENGINES 確認 InnoDB = YES
# 建表/修改表指定引擎
CREATE TABLE t (...) ENGINE = InnoDB;
ALTER TABLE old_table ENGINE = InnoDB;
mysql_query("BEGIN");
$sql1 = "INSERT INTO test VALUES('11','88')";
$sql2 = "INSERT INTO test VALUES('11','88','444')"; -- 故意錯誤
$res1 = mysql_query($sql1);
$res2 = mysql_query($sql2);
if ($res1 && $res2) {
mysql_query("COMMIT");
} else {
mysql_query("ROLLBACK");
}
$sql_lock = "LOCK TABLES test WRITE";
mysql_query($sql_lock);
$sql_ins = "INSERT INTO test VALUES('$a','$b')";
if (mysql_query($sql_ins)) {
echo 'successful!';
} else {
echo 'Unsuccessful!';
}
$sql_unlock = "UNLOCK TABLES";
mysql_query($sql_unlock);