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 相关文章推荐
一个查看session内容的函数
Oct 09 PHP
php的计数器程序
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
Phpbean路由转发的php代码
Jan 10 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
PHP 动态随机生成验证码类代码
Apr 09 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python实现停车管理系统
2018/11/30 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
2014年高考决心书
2014/03/11 职场文书
银行员工考核评语
2014/12/31 职场文书
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis