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 相关文章推荐
BBS(php & mysql)完整版(一)
Oct 09 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
php+mysql写的简单留言本实例代码
Jul 25 PHP
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
PHP Directory 函数的详解
Mar 07 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php身份证号码检查类实例
Jun 18 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
php实现微信扫码支付
Mar 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
2020最新CPU的性能排名
2020/04/02 数码科技
PHP写MySQL数据 实现代码
2009/06/15 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python 正则表达式操作指南
2009/05/04 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
linux下进程间通信的方式
2013/01/23 面试题
写演讲稿要注意的六件事
2014/01/14 职场文书
九年级体育教学反思
2014/01/23 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
违纪检讨书
2015/01/27 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书