本文實例講述了php的PDO事務處理機制。分享給大家供大家參考,具體如下:
事務 (Transaction) 是操作數據庫中很重要的一個功能, 它可以讓你預定一條, 或者一系列 SQL 語句, 然后一起執行,并且在執行的過程中, 如果其中的某條執行失敗, 可以回滾所有已更改的操作. 如果執行成功, 那么這一系列操作都會永久有效. 事務很好的解決了在操作數據庫的時候不同步的問題. 同時, 通過事務去執行大數據量的時候, 執行效率可以提高很多很多.
在PDO中同樣可以實現事物處理的功能
1. 開啟事物:beginTransaction()
方法
beginTransaction()方法將關閉自動提交(autocommit)模式,直到事物被提交或者回滾以后才恢復
2. 提交事物:commit()
方法
commit()方法完成事物的提交操作,成功則返回true,否則返回false。
3. 事物回滾:rollBack()
方法
rollBack()方法執行事物的回滾操作。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$dbms = 'mysql' ; //數據庫類型 $dbName = 'admin' ; //使用的數據庫 $user = 'root' ; //數據庫連接用戶名 $pwd = 'password' ; //數據庫連接密碼 $host = 'localhost' ; //數據庫主機名 $dsn = "$dbms:host=$host;port=3306;dbname=$dbName" ; try { $pdo = new PDO( $dsn , $user , $pwd ); //初始化一個PDO對象,就是創建了數據庫連接對象$pdo $pdo ->beginTransaction(); //開啟事物 $query = "insert into user (username,password) values('admin','123456')" ; //需要執行的sql語句 $res = $pdo ->prepare( $query ); if ( $res ->execute()) { echo "數據添加成功" ; } else { echo "數據添加失敗" ; } $pdo ->commit(); //執行事物的提交操作 } catch (PDOException $e ){ die ( "Error!: " . $e ->getMessage(). '<br>' ); $pdo ->rollBack(); //執行事物的回滾操作 } |
補充:
數據庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要么完全地執行,要么完全地不執行。
事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單 元,可以簡化錯誤恢復并使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。
事務是數據庫運行中的一個邏輯工作單位,由DBMS中的事務管理子系統負責事務的處理。
相關屬性:
① 原子性(Atomic)(Atomicity)
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。通常,與某個事務關聯的操作具有共同的目標,并且是相互依賴的。如果系統只執行這些操作的一個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。
② 一致性(Consistent)(Consistency)
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數 據結構(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護一致性的責任由應用程序開發人員承擔,他們必須確保應用程序已強制所有已知的完整性約束。例如,當開發用于轉 帳的應用程序時,應避免在轉帳過程中任意移動小數點。
③ 隔離性(Insulation)(Isolation)
由并發事務所作的修 改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不 會查看中間狀態的數據。這稱為隔離性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。當事務可序列化 時將獲得最高的隔離級別。在此級別上,從一組可并行執行的事務獲得的結果與通過連續運行每個事務所獲得的結果相同。由于高度隔離會限制可并行執行的事務 數,所以一些應用程序降低隔離級別以換取更大的吞吐量。
④ 持久性(Duration)(Durability)
事務完成之后,它對于系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。
希望本文所述對大家PHP程序設計有所幫助。