php的PDO事務(wù)處理機(jī)制實(shí)例分析
本文實(shí)例講述了php的PDO事務(wù)處理機(jī)制。分享給大家供大家參考,具體如下:
事務(wù) (Transaction) 是操作數(shù)據(jù)庫中很重要的一個(gè)功能, 它可以讓你預(yù)定一條, 或者一系列 SQL 語句, 然后一起執(zhí)行,并且在執(zhí)行的過程中, 如果其中的某條執(zhí)行失敗, 可以回滾所有已更改的操作. 如果執(zhí)行成功, 那么這一系列操作都會永久有效. 事務(wù)很好的解決了在操作數(shù)據(jù)庫的時(shí)候不同步的問題. 同時(shí), 通過事務(wù)去執(zhí)行大數(shù)據(jù)量的時(shí)候, 執(zhí)行效率可以提高很多很多.
在PDO中同樣可以實(shí)現(xiàn)事物處理的功能
1. 開啟事物:beginTransaction()
方法
beginTransaction()方法將關(guān)閉自動提交(autocommit)模式,直到事物被提交或者回滾以后才恢復(fù)
2. 提交事物:commit()
方法
commit()方法完成事物的提交操作,成功則返回true,否則返回false。
3. 事物回滾:rollBack()
方法
rollBack()方法執(zhí)行事物的回滾操作。
例如:
$dbms='mysql';//數(shù)據(jù)庫類型 $dbName='admin';//使用的數(shù)據(jù)庫 $user='root';//數(shù)據(jù)庫連接用戶名 $pwd='password';//數(shù)據(jù)庫連接密碼 $host='localhost';//數(shù)據(jù)庫主機(jī)名 $dsn="$dbms:host=$host;port=3306;dbname=$dbName"; try { $pdo = new PDO($dsn, $user, $pwd);//初始化一個(gè)PDO對象,就是創(chuàng)建了數(shù)據(jù)庫連接對象$pdo $pdo->beginTransaction();//開啟事物 $query = "insert into user (username,password) values('admin','123456')";//需要執(zhí)行的sql語句 $res = $pdo->prepare($query); if ($res->execute()) { echo "數(shù)據(jù)添加成功"; }else{ echo "數(shù)據(jù)添加失敗"; } $pdo->commit();//執(zhí)行事物的提交操作 }catch(PDOException $e){ die("Error!: ".$e->getMessage().'<br>'); $pdo->rollBack();//執(zhí)行事物的回滾操作 }
補(bǔ)充:
數(shù)據(jù)庫事務(wù)(Database Transaction) ,是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行,要么完全地不執(zhí)行。
事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單 元,可以簡化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。
事務(wù)是數(shù)據(jù)庫運(yùn)行中的一個(gè)邏輯工作單位,由DBMS中的事務(wù)管理子系統(tǒng)負(fù)責(zé)事務(wù)的處理。
相關(guān)屬性:
① 原子性(Atomic)(Atomicity)
事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常,與某個(gè)事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個(gè)子集,則可能會破壞事務(wù)的總體目標(biāo)。原子性消除了系統(tǒng)處理操作子集的可能性。
② 一致性(Consistent)(Consistency)
事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù) 據(jù)結(jié)構(gòu)(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護(hù)一致性的責(zé)任由應(yīng)用程序開發(fā)人員承擔(dān),他們必須確保應(yīng)用程序已強(qiáng)制所有已知的完整性約束。例如,當(dāng)開發(fā)用于轉(zhuǎn) 帳的應(yīng)用程序時(shí),應(yīng)避免在轉(zhuǎn)帳過程中任意移動小數(shù)點(diǎn)。
③ 隔離性(Insulation)(Isolation)
由并發(fā)事務(wù)所作的修 改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不 會查看中間狀態(tài)的數(shù)據(jù)。這稱為隔離性,因?yàn)樗軌蛑匦卵b載起始數(shù)據(jù),并且重播一系列事務(wù),以使數(shù)據(jù)結(jié)束時(shí)的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同。當(dāng)事務(wù)可序列化 時(shí)將獲得最高的隔離級別。在此級別上,從一組可并行執(zhí)行的事務(wù)獲得的結(jié)果與通過連續(xù)運(yùn)行每個(gè)事務(wù)所獲得的結(jié)果相同。由于高度隔離會限制可并行執(zhí)行的事務(wù) 數(shù),所以一些應(yīng)用程序降低隔離級別以換取更大的吞吐量。
④ 持久性(Duration)(Durability)
事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫程序設(shè)計(jì)技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
- PHP5中使用PDO連接數(shù)據(jù)庫的方法
- PHP中PDO連接數(shù)據(jù)庫中各種DNS設(shè)置方法小結(jié)
- ThinkPHP框架基于PDO方式連接數(shù)據(jù)庫操作示例
- PHP實(shí)現(xiàn)的pdo連接數(shù)據(jù)庫并插入數(shù)據(jù)功能簡單示例
- PHP利用pdo_odbc實(shí)現(xiàn)連接數(shù)據(jù)庫示例【基于ThinkPHP5.1搭建的項(xiàng)目】
- php中在PDO中使用事務(wù)(Transaction)
- php下pdo的mysql事務(wù)處理用法實(shí)例
- php使用PDO事務(wù)配合表格讀取大量數(shù)據(jù)插入操作實(shí)現(xiàn)方法
- PHP基于PDO實(shí)現(xiàn)的SQLite操作類【包含增刪改查及事務(wù)等操作】
- php PDO實(shí)現(xiàn)的事務(wù)回滾示例
- php pdo連接數(shù)據(jù)庫操作示例
相關(guān)文章
實(shí)戰(zhàn)mysql導(dǎo)出中文亂碼及phpmyadmin導(dǎo)入中文亂碼的解決方法
因?yàn)橐驯緳C(jī)的gbk編碼的mysql數(shù)據(jù)庫導(dǎo)入到虛擬主機(jī)去,服務(wù)商只提供了phpmyadmin供你導(dǎo)入導(dǎo)出。2010-06-06PHP設(shè)計(jì)模式之原型設(shè)計(jì)模式原理與用法分析
這篇文章主要介紹了PHP設(shè)計(jì)模式之原型設(shè)計(jì)模式,簡單描述了原型設(shè)計(jì)模式的概念、原理并結(jié)合實(shí)例形式分析了php原型設(shè)計(jì)模式的定義與使用方法,需要的朋友可以參考下2018-04-04PHP進(jìn)制轉(zhuǎn)換實(shí)例分析(2,8,16,36,64進(jìn)制至10進(jìn)制相互轉(zhuǎn)換)
這篇文章主要介紹了PHP進(jìn)制轉(zhuǎn)換,結(jié)合具體實(shí)例形式分析了2,8,16,36,64進(jìn)制至10進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02用php簡單實(shí)現(xiàn)加減乘除計(jì)算器
加減乘除計(jì)算器想必大家都有使用過吧,本文為大家介紹下使用php如何實(shí)現(xiàn),下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2014-01-01php中unable to fork報(bào)錯(cuò)簡單解決方法
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于php中unable to fork報(bào)錯(cuò)簡單解決方法,對此有興趣的朋友們可以跟著學(xué)習(xí)下。2021-02-02計(jì)算一段日期內(nèi)的周末天數(shù)的php代碼(星期六,星期日總和)
算法沒什么難點(diǎn),核心思想就是將這個(gè)時(shí)間段調(diào)整為7的整數(shù),然后乘以2,在減去或加上多算和少算的周六或周日,得到的就是星期六和星期日的總和。2009-11-11