程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

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



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved