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 相关文章推荐
用PHP进行MySQL删除记录操作代码
Jun 07 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
php 分页原理详解
Aug 21 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
php限制文件下载速度的代码
Oct 20 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 PHP
PHP 实现重载
Mar 09 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 冒泡排序算法的实现代码
2010/08/08 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
Angular路由简单学习
2016/12/26 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
Python编程之Re模块下的函数介绍
2017/10/28 Python
python学生管理系统代码实现
2020/04/05 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
长安大学毕业生自我鉴定
2014/01/17 职场文书
教师自我反思材料
2014/02/14 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
校园绿化美化方案
2014/06/08 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
Python如何用re模块实现简易tokenizer
2022/05/02 Python