MySQLi - 事務



事務是一系列資料庫操作的順序組,它被執行得好像是一個單獨的工作單元。換句話說,除非組中的每個單獨操作都成功,否則事務永遠不會完成。如果事務中的任何操作失敗,則整個事務將失敗。

實際上,您將許多 SQL 查詢組合成一個組,並將它們全部一起執行作為事務的一部分。

事務的特性

事務具有以下四個標準特性,通常用首字母縮寫詞 ACID 來表示:

  • 原子性 - 確保工作單元中的所有操作都成功完成;否則,事務將在失敗點中止,並且先前操作將回滾到其以前的狀態。

  • 一致性 - 確保資料庫在成功提交的事務後正確更改狀態。

  • 隔離性 - 使事務能夠獨立於彼此並且對彼此透明地執行。

  • 永續性 - 確保已提交事務的結果或效果在系統故障的情況下仍然存在。

在 MySQL 中,事務以語句 BEGIN WORK 開始,並以 COMMIT 或 ROLLBACK 語句結束。BEGIN 和 END 語句之間的 SQLi 命令構成事務的主體。

COMMIT 和 ROLLBACK

這兩個關鍵字CommitRollback 主要用於 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

您可以使用其他表型別,例如GEMINIBDB,但這取決於您的安裝是否支援這兩種型別。

廣告