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实现的简单压缩英文字符串的代码
Apr 24 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
定义php常量的详解
Jun 09 PHP
php ci框架验证码实例分析
Jun 26 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
工作自我评价怎么写
2014/01/29 职场文书
保密承诺书
2014/03/27 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
7个关于Python的经典基础案例
2021/11/07 Python
Python作用域和名称空间的详细介绍
2022/04/13 Python