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 include的妙用,实现路径加密
Jul 29 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
浅析PHP Socket技术
Aug 02 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
PHP单例模式简单用法示例
Jun 23 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 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 反射机制实现动态代理的代码
2008/10/22 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
session 加入redis的实现代码
2016/07/15 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
详解python while 函数及while和for的区别
2018/09/07 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
python能否java成为主流语言吗
2020/06/22 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
财务管理职业生涯规划范文
2013/12/27 职场文书
超市端午节活动方案
2014/01/23 职场文书
自我反省检讨书
2014/01/23 职场文书
文秘大学生求职信
2014/02/25 职场文书
洗发水广告词
2014/03/13 职场文书
小学二年级学生评语
2014/04/21 职场文书
解除劳动合同协议书
2014/09/17 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
教师节大会主持词
2015/07/06 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
python元组打包和解包过程详解
2021/08/02 Python