
- MySQLi 教程
- MySQLi - 首頁
- MySQLi - 簡介
- MySQLi - PHP 語法
- MySQLi - 連線
- MySQLi - 建立資料庫
- MySQLi - 刪除資料庫
- MySQLi - 選擇資料庫
- MySQLi - 建立表
- MySQLi - 刪除表
- MySQLi - 插入查詢
- MySQLi - 選擇查詢
- MySQLi - Where 子句
- MySQLi - 更新查詢
- MySQLi - 刪除查詢
- MySQLi - Like 子句
- MySQLi - 排序結果
- MySQLi - 使用連線
- MySQLi - 處理 NULL 值
- 獲取和使用 MySQLi 元資料
- MySQL
- MySQL - 安裝
- MySQL - 管理
- MySQL - 資料型別
- MySQL - 正則表示式
- MySQL - 事務
- MySQL - Alter 命令
- MySQL - 索引
- MySQL - 臨時表
- MySQL - 克隆表
- MySQL - 使用序列
- MySQL - 處理重複資料
- MySQLi 有用資源
- MySQLi - 有用函式
- MySQLi - 快速指南
- MySQLi - 有用資源
- MySQLi - 討論
MySQLi - 事務
事務是一系列資料庫操作的順序組,它被執行得好像是一個單獨的工作單元。換句話說,除非組中的每個單獨操作都成功,否則事務永遠不會完成。如果事務中的任何操作失敗,則整個事務將失敗。
實際上,您將許多 SQL 查詢組合成一個組,並將它們全部一起執行作為事務的一部分。
事務的特性
事務具有以下四個標準特性,通常用首字母縮寫詞 ACID 來表示:
原子性 - 確保工作單元中的所有操作都成功完成;否則,事務將在失敗點中止,並且先前操作將回滾到其以前的狀態。
一致性 - 確保資料庫在成功提交的事務後正確更改狀態。
隔離性 - 使事務能夠獨立於彼此並且對彼此透明地執行。
永續性 - 確保已提交事務的結果或效果在系統故障的情況下仍然存在。
在 MySQL 中,事務以語句 BEGIN WORK 開始,並以 COMMIT 或 ROLLBACK 語句結束。BEGIN 和 END 語句之間的 SQLi 命令構成事務的主體。
COMMIT 和 ROLLBACK
這兩個關鍵字Commit 和Rollback 主要用於 MySQL 事務。
當成功完成事務時,應發出 COMMIT 命令,以便對所有相關表所做的更改生效。
如果發生故障,應發出 ROLLBACK 命令以將事務中引用的每個表恢復到其先前狀態。
您可以透過設定名為AUTOCOMMIT 的會話變數來控制事務的行為。如果 AUTOCOMMIT 設定為 1(預設值),則每個 SQL 語句(在事務中或不在事務中)都被視為一個完整的事務,並在其完成時預設提交。當 AUTOCOMMIT 設定為 0 時,透過發出 SET AUTOCOMMIT=0 命令,後續一系列語句的行為就像一個事務,並且在發出顯式 COMMIT 語句之前不會提交任何活動。
您可以使用mysqli_query() 函式在 PHP 中執行這些 SQL 命令。
事務通用示例
此事件序列獨立於使用的程式語言;可以在您用於建立應用程式的任何語言中建立邏輯路徑。
您可以使用mysqli_query() 函式在 PHP 中執行這些 SQL 命令。
透過發出 SQL 命令BEGIN WORK 開始事務。
發出一個或多個 SQL 命令,例如 SELECT、INSERT、UPDATE 或 DELETE。
檢查是否存在錯誤以及一切是否符合您的要求。
如果存在任何錯誤,則發出 ROLLBACK 命令,否則發出 COMMIT 命令。
MySQL 中支援事務的表型別
您不能直接使用事務,可以使用,但它們不會是安全且有保證的。如果您計劃在 MySQL 程式設計中使用事務,則需要以特殊方式建立表。有許多型別的表支援事務,但最流行的是InnoDB。
對 InnoDB 表的支援需要在從原始碼編譯 MySQL 時使用特定的編譯引數。如果您的 MySQL 版本不支援 InnoDB,請要求您的網際網路服務提供商構建一個支援 InnoDB 表型別的 MySQL 版本,或下載並安裝 Windows 或 Linux/UNIX 的 MySQL-Max 二進位制發行版,並在開發環境中使用該表型別。
如果您的 MySQL 安裝支援 InnoDB 表,只需在建立表語句中新增TYPE = InnoDB 定義。例如,以下程式碼建立了一個名為 tutorials_innodb 的 InnoDB 表:
root@host# mysql -u root -p; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table tutorials_innodb → ( → tutorial_author varchar(40) NOT NULL, → tutorial_count INT → ) TYPE = InnoDB; Query OK, 0 rows affected (0.02 sec)
檢視以下連結以瞭解更多資訊:-InnoDB
您可以使用其他表型別,例如GEMINI 或BDB,但這取決於您的安裝是否支援這兩種型別。