php的PDO事务处理机制实例分析


Posted in PHP onFebruary 16, 2017

本文实例讲述了php的PDO事务处理机制。分享给大家供大家参考,具体如下:

事务 (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)

事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
Jun 21 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
php使用include 和require引入文件的区别
Feb 16 #PHP
Yii2实现UploadedFile上传文件示例
Feb 15 #PHP
使用PHPMailer发送邮件实例
Feb 15 #PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 #PHP
php使用GD2绘制几何图形示例
Feb 15 #PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 #PHP
php使用Jpgraph创建折线图效果示例
Feb 15 #PHP
You might like
PHP数组交集的优化代码分析
2011/03/06 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
利用python实现微信头像加红色数字功能
2018/03/26 Python
python实现推箱子游戏
2020/03/25 Python
python pytest进阶之fixture详解
2019/06/27 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
使用Python构造hive insert语句说明
2020/06/06 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
护士自我鉴定范文
2013/10/06 职场文书
工作会议简报
2015/07/20 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电