首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

為 MySQL 表啟用事務支持:ALTER TABLE ENGINE=InnoDB + PHP 事務控制實例

     編輯:MySQL 資料庫相關知識

1. 將表引擎改為 InnoDB

ALTER TABLE tableName ENGINE=InnoDB;

建表時直接指定:

CREATE TABLE test (
  id INT AUTO_INCREMENT PRIMARY KEY,
  websitename VARCHAR(200),
  websiteurl VARCHAR(200)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. PHP 控制事務(舊 mysql 擴展示例)

$con = mysql_connect("localhost","root","pwd");
mysql_select_db("mysqlnew");

# 事務 1:提交
mysql_query("BEGIN");
mysql_query("INSERT INTO test(websitename,websiteurl) VALUES('','https://jb51.net')");
mysql_query("INSERT INTO test(websitename,websiteurl) VALUES('百度','https://baidu.com')");
mysql_query("COMMIT");

# 事務 2:回滾
mysql_query("BEGIN");
mysql_query("INSERT INTO test(websitename,websiteurl) VALUES('google','https://google.com.hk')");
mysql_query("ROLLBACK");

# 事務 3:無 COMMIT/ROLLBACK(隱式回滾)
mysql_query("BEGIN");
mysql_query("INSERT INTO test(websitename,websiteurl) VALUES('bing','https://bing.com')");
# 腳本結束,連接關閉,自動回滾

結果驗證

僅前兩條 INSERT 成功寫入,google 與 bing 因回滾/隱式回滾未持久化。

現代建議

新代碼請使用 mysqli 或 PDO 的 beginTransaction()、commit()、rollBack() 方法,避免手寫 SQL。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved