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转成EXE文件
Oct 09 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
php 数组二分法查找函数代码
Feb 16 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
php多任务程序实例解析
Jul 19 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
Feb 04 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
php实现商城购物车的思路和源码分析
Jul 23 PHP
PHP遍历数组的6种方式总结
Nov 17 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
Protoss魔法科技
2020/03/14 星际争霸
一段防盗连的PHP代码
2006/12/06 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
javascript中"/"运算符常见错误
2010/10/13 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
在Python下尝试多线程编程
2015/04/28 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
高中的职业生涯规划书
2013/12/28 职场文书
党章学习思想汇报
2014/01/14 职场文书
安全责任书范本
2014/04/15 职场文书
新法人代表任命书
2014/06/06 职场文书
小学教师党员承诺书
2015/04/27 职场文书
《雷雨》教学反思
2016/02/20 职场文书
Python字符串的转义字符
2022/04/07 Python