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 引用是个坏习惯
Mar 12 PHP
PHP数组交集的优化代码分析
Mar 06 PHP
php表单提交问题的解决方法
Apr 12 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php中apc缓存使用示例
Dec 25 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP钩子实现方法解析
May 21 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
php 邮件发送问题解决
2014/03/22 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python绘制七段数码管实例代码
2017/12/20 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
营销总经理的岗位职责
2013/12/15 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
运动会班级口号
2014/06/09 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
基层工作经历证明
2015/06/19 职场文书
公司车辆管理制度
2015/08/04 职场文书
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL