PHP操作MySQL事务实例


Posted in PHP onNovember 05, 2014

本文实例讲述了PHP操作MySQL事务的方法,分享给大家供大家参考。具体方法如下:

一般来说,事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义:

① 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。
② 一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。
③ 隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。
④ 持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。

在PHP中,mysqli 已经很好的封装了mysql事务的相关操作。如下示例:

$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";

$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";

$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";

$mysqli = new mysqli('localhost','root','','DB_Lib2Test');

$mysqli->autocommit(false);//开始事物

$mysqli->query($sql1);

$mysqli->query($sql2);

if(!$mysqli->errno){

  $mysqli->commit();

  echo 'ok';

}else{

 echo 'err';

  $mysqli->rollback();

}

在这里,我们再使用 php mysql 系列函数执行事务。
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";

$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";

$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";

$conn = mysql_connect('localhost','root','');

mysql_select_db('DB_Lib2Test');

mysql_query('start transaction');

//mysql_query('SET autocommit=0');

mysql_query($sql1);

mysql_query($sql2);

if(mysql_errno ()){

    mysql_query('rollback');

    echo 'err';

}else{

    mysql_query('commit');

    echo 'ok';

}

// mysql_query('SET autocommit=1');

// mysql_query($sql3);

在这里要注意:

MyISAM:不支持事务,用于只读程序提高性能
InnoDB:支持ACID事务、行级锁、并发
Berkeley DB:支持事务

希望本文所述对大家的PHP+MySQL数据库程序设计有所帮助。

PHP 相关文章推荐
中英文字符串翻转函数
Dec 09 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
PHP中::、->、self、$this几种操作符的区别介绍
Apr 24 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
yii去掉必填项中星号的方法
Dec 28 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 #PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 #PHP
PHP实现获取域名的方法小结
Nov 05 #PHP
php调用shell的方法
Nov 05 #PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 #PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 #PHP
phpnow php探针环境检测代码
Nov 04 #PHP
You might like
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
smarty简单入门实例
2014/11/28 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python内存读写操作示例
2018/07/18 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
django 模型字段设置默认值代码
2020/07/15 Python
python 高阶函数简单介绍
2021/02/19 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
授权委托书范本
2014/04/03 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
小学中等生评语
2014/12/29 职场文书
长城导游词
2015/01/30 职场文书
教师个人师德总结
2015/02/06 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers