位置:首頁 > 數據庫 > MySQL教學 > MySQL事務

MySQL事務

事務是數據庫處理操作,其中執行就好像它是一個單一的一組有序的工作單元。換言之,事務將永遠不會是完全的,除非在組內每個單獨的操作是成功的。如果事務中的任何操作失敗,整個事務將失敗。

實際上,許多SQL查詢組成到一個組,將執行所有這些一起作為事務的一部分。

事務性質

事務具有以下四個標準屬性,通常由首字母縮寫ACID簡稱:

  • 原子性: 確保了工作單位中的所有操作都成功完成; 否則,事務被中止,在失敗時會被回滾到事務操作以前的狀態。

  • 一致性:可確保數據庫在正確的更改狀態在一個成功提交事務。

  • 隔離: 使事務相互獨立地操作。

  • 持久性: 確保了提交事務的結果或係統故障情況下仍然存在作用。

在MySQL中,事務以BEGIN WORK語句開始開始工作,並使用COMMIT或ROLLBACK語句結束。SQL命令在開始和結束語句之間構成大量事務。

提交和回滾

這兩個關鍵字 Commit 和 Rollback 主要用於MySQL的事務。

  • 當一個成功的事務完成後,COMMIT 命令發出的變化對所有涉及的表將生效。

  • 如果發生故障,ROLLBACK命令發出後,事務中引用的每個表將恢複到事務開始之前的狀態。

可以通過設置AUTOCOMMIT這個會話變量控製事務的行為。如果AUTOCOMMIT設置為1(默認值),那麼每個SQL語句(在事務或不在事務)被認為是一個完整的事務並提交,在默認情況下是在當它完成時。當AUTOCOMMIT設置為0,通過發出SET AUTOCOMMIT=0命令, 隨後的一係列語句就像一個事務,但並冇有任何活動被提交直到一個明確的發出 COMMIT 語句。

可以通過使用PHP 的 mysql_query()函數執行這些SQL命令。

關於事務通用示例

此事件序列是獨立於所使用的編程語言; 邏輯路徑可以是任何編程語言,使用它在創建應用程序中創建。

可以通過使用 mysql_query()函數執行這些PHP SQL命令

  • 開始事務是通過發出SQL命令BEGIN WORK

  • 類似發出的一個或多個SQL命令 SELECT, INSERT, UPDATE 或 DELETE.

  • 根據要求,檢查是否有任何錯誤

  • 如果有錯誤,發出ROLLBACK命令,否則執行COMMIT命令。

在MySQL的事務安全表類型

不能直接使用事務,可以使用但它們冇有安全保障。如果打算使用事務在MySQL編程,那麼需要使用一個特殊的方式來創建表。 有許多類型的表其支持事務,但目前最流行的一種是:InnoDB.

支持InnoDB表需要特定的編譯參數,在源代碼編譯MySQL時。如果MySQL版本不支持InnoDB,得要求互聯網服務提供商建立一個版本的MySQL的InnoDB表類型的支持,或 下載並安裝MySQL-Max二進製分發的Windows版本,或者Linux/UNIX開發環境中工作的表類型。

如果你的MySQL安裝支持InnoDB表,簡直就是一個TYPE= InnoDB的定義添加到表創建語句後麵。例如,下麵的代碼創建一個名為 tcount_tbl 的 InnoDB 類型表:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> create table tcount_tbl
    -> (
    -> tutorial_author varchar(40) NOT NULL,
    -> tutorial_count  INT
    -> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

請檢查下麵的鏈接了解更多有關: InnoDB

可以使用其它類型的表 GEMINI 或 BDB, 但它取決於安裝MySQL時,是否支持這兩種類型。