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 相关文章推荐
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
PHP中的self关键字详解
Jun 23 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
PHP二维数组分页2种实现方法解析
Jul 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python实现剪切功能
2019/01/23 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
大学生如何写自荐信
2014/01/08 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
初中优秀学生评语
2014/12/29 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
Python制作表白爱心合集
2022/01/22 Python