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時,是否支持這兩種類型。