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来自动调用不同服务器上的flash
Oct 09 PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
PHP的单引号和双引号 字符串效率
May 27 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
试用php中oci8扩展
Jun 18 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 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 shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
js模糊查询实例分享
2016/12/26 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
在Python下尝试多线程编程
2015/04/28 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
python 字典访问的三种方法小结
2019/12/05 Python
Django框架models使用group by详解
2020/03/11 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
一份Java笔试题
2012/02/21 面试题
网络安全类面试题
2015/08/01 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
给同事的道歉信
2014/01/11 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
学习雷锋标语
2014/06/25 职场文书
2014年人大工作总结
2014/12/10 职场文书
食品安全主题班会
2015/08/13 职场文书
四年级作文之植物
2019/09/20 职场文书
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android
浅析JavaScript中的变量提升
2022/06/01 Javascript