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 程序员也要学会使用“异常”
Jun 16 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
Laravel框架自定义分页样式操作示例
Jan 26 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
支持中文的php加密解密类代码
2011/11/27 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
如何在PHP中生成随机数
2020/06/04 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
js转换对象为xml
2017/02/17 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
python获取本机外网ip的方法
2015/04/15 Python
python 字符串只保留汉字的方法
2018/11/16 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
如何更优雅地写python代码
2019/07/02 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
电大自我鉴定
2013/10/27 职场文书
高中数学教学反思
2014/01/30 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
个人合作协议书范本
2014/04/18 职场文书
迁户口计划生育证明
2014/10/19 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
2014年绿化工作总结
2014/12/09 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
详解SQL报错盲注
2022/07/23 SQL Server