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实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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往windows中添加用户
2006/12/06 PHP
php单例模式示例分享
2015/02/12 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP内核探索之变量
2015/12/22 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
js 分栏效果实现代码
2009/08/29 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
Django中Model的使用方法教程
2018/03/07 Python
python使用多进程的实例详解
2018/09/19 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python实现从wind导入数据
2019/12/03 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
24岁生日感言
2014/01/13 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL