PDO中事物處理

2021-07-10 22:11:44 字數 1838 閱讀 5035

事務 (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 else

$pdo->commit();//執行事物的提交操作

}catch(pdoexception $e)

補充:

資料庫事務(database transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。

事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單 元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂的acid(原子性、一致性、隔離性和永續性)屬性。

事務是資料庫執行中的乙個邏輯工作單位,由dbms中的事務管理子系統負責事務的處理。

相關屬性:

原子性(atomic)(atomicity)

事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。通常,與某個事務關聯的操作具有共同的目標,並且是相互依賴的。如果系統只執行這些操作的乙個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。

一致性(consistent)(consistency)

事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部數 據結構(如 b 樹索引或雙向鍊錶)都必須是正確的。某些維護一致性的責任由應用程式開發人員承擔,他們必須確保應用程式已強制所有已知的完整性約束。例如,當開發用於轉 帳的應用程式時,應避免在轉帳過程中任意移動小數點。

隔離性(insulation)(isolation)

由併發事務所作的修 改必須與任何其它併發事務所作的修改隔離。事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不 會檢視中間狀態的資料。這稱為隔離性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。當事務可序列化 時將獲得最高的隔離級別。在此級別上,從一組可並行執行的事務獲得的結果與通過連續執行每個事務所獲得的結果相同。由於高度隔離會限制可並行執行的事務 數,所以一些應用程式降低隔離級別以換取更大的吞吐量。

永續性(duration)(durability)

事務完成之後,它對於系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。

PDO的事物處理

首先記住這幾個步驟 1.關閉自動提交 2.開啟事務處理 3.有異常就自動丟擲異常提示再回滾 4.開啟自動提交 mysql只有這個innodb驅動是支援事務處理的,預設myisam驅動不支援.展示 1 關閉 pdo 的自動提交 php view plain copy pdo setattribute ...

PDO異常處理

pdo errmode silent 靜默模式 預設 pdo errmode warning 警告模式 pdo errmode exception 異常模式 示例 利用pdo物件實現異常處理操作 echo pdo類的例項化 1 設定資料來源相關引數 dbms mysql 選擇資料庫型別 host l...

php中 pdo的預處理

以下是一些pdo預處理 的一些小知識 兩種佔位符號 關聯陣列,按名稱使用,和順序無關,以冒號開頭,自己定義 引數 索引陣列,按索引順序使用 stmt pdo prepare sql sql可是是任意sql語句,這與mysqli不同 如 trycatch pdoexception e stmt pdo...