事務(Transaction) 是操作資料庫中很重要的功能, 它可以讓你預定一條, 或一系列SQL 語句, 然後一起執行,並且在執行的過程中, 如果其中的某條執行失敗, 可以回滾所有已更改的操作. 如果執行成功, 那麼這一系列操作都會永久有效. 事務很好的解決了在操作數據庫的時候不同步的問題. 同時, 通過事務去執行大數據量的時候, 執行效率可以提高很多很多.
在PDO中同樣可以實現事物處理的功能
1:開啟事物:beginTransaction()方法
beginTransaction()方法將關閉自動提交(autocommit)模式,直到事物提交或回滾以後才恢復
2:提交事物:commit()方法
commit()方法完成事物的提交操作,成功則傳回true,否則回傳false。
3:事物回滾:rollBack()方法
rollBack()方法執行事物的回滾操作。
例如:
$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)
事務完成之後,它對於系統的影響是永久性的。該修改即使出現致命的系統故障也將保持持續。
以上就介紹了PDO中事物處理,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。