MySQL的事务的处理
步骤:
1.开启事务 start transaction
当我们开启一个事务的时候,我们对sql的操作都发生在内存中,但是没有真正的反馈到数据库磁盘的文件中!
2.回滚 rollback
回滚,就是恢复到事务开启之前的最原始的状态!
注意:回滚操作会自动的关闭一个事务,如果想再次执行事务,需要重新开启事务!
3.提交 commit
事务的基本原理
普通的执行,之所以是立即执行并生效,因为默认的,MySQL对sql语句的执行是自动提交的!所以,开启一个事务的本质,就是关闭了以前的自动提交的功能,而是由用户手动提交(利用commit语句)!
总结事务的步骤:
1, 开启事务
2, 如果执行成功,就提交commit
3, 如果有任何一条sql语句执行失败,则回滚rollback!
事务处理最典型的就是借还钱。下面以张三向李四还1000元为例
首先查看数据库中各自的钱数
下面是处理还钱事务的代码:
<?php /**
* MySQL实现事务操作
*/ echo "<meta charset=utf-8>"; // 1 连接数据库
$link = @mysql_connect('localhost','root','') or die('连接数据库失败');
mysql_select_db('test',$link);
mysql_query('set names utf8'); // 2 开启事务
mysql_query("start transaction");
//设置一个变量,用来判断所有sql语句是否成功
$flag = true; // 2.1执行事务中的一组sql语句
// 李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'";
$res = mysql_query($sql);
if (!$res) {
//若sql语句执行失败,把$falg设置为false
$flag = false;
} //张三的money-1000
$sql = "update pdo set money=money-1000 where name='张三'";
$res = mysql_query($sql);
if (!$res) {
//若sql语句执行失败,把$falg设置为false
$flag = false;
} // 2.2 判断事务是否执行成功
if ($flag) {
//所有sql语句执行成功,把sql语句提交
mysql_query('commit');
echo "还钱成功!";
}else{
// 如其中一条执行失败,则回滚到事务开启之前的状态
mysql_query('rollback');
echo "还钱失败!";
}
结果:
下面,我们故意把其中一个字段写错,看看事务是否正常处理,数据库中的钱数是否有变化!
// 李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'"; //把moeny字段错写成mone
结果:
结果是还钱失败,并且数据库中各自的钱数没有变化,说明当某一条语句未执行成功时,事物不会提交,而会回滚,把数据恢复到开始事务之前的原始状态,这也是使用事务的作用,即只有当事务中所有sql语句全部执行成功,事务才会提交,否则会回滚!
下篇会介绍PDO中事务处理
MySQL的事务的处理的更多相关文章
- MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...
- Mysql分布式事务
关于Mysql分布式事务介绍,可参考:http://blog.csdn.net/luckyjiuyi/article/details/46955337 分为两个阶段:准备和执行阶段.有两个角色:事务的 ...
- mysql的事务和select...for update
一.mysql的事务mysql的事务有两种方式:1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMI ...
- MySQL的事务
MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...
- mysql 分布式事务
php + mysql 分布式事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicit ...
- MySQL之事务隔离级别--转载
转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted ...
- MySQL数据库事务剖析
MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
- 后端分布式系列:分布式存储-MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适.最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类.结合实际工作中碰到的问题,以寻找答案的方式来剖 ...
随机推荐
- python线程死锁与递归锁
死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...
- 使用bash echo 输出回车转义
输出回车 [root@~]# echo -e 'hello\n'hello 回车去掉 [root@~]# echo -n hello hello[root@~]#
- dubbo源码阅读之SPI
dubbo SPI SPI,全程Service Provider interface, java中的一种借口扩展机制,将借口的实现类注明在配置文件中,程序在运行时通过扫描这些配置文件从而获取全部的实现 ...
- Python Web框架 tornado 异步原理
Python Web框架 tornado 异步原理 参考:http://www.jb51.net/article/64747.htm 待整理
- MySQL命令行登陆,远程登陆MySQL
注: MySQL图形界面管理工具[navicat 10.1.8中文绿色版] 下载地址:http://www.t00y.com/file/18393836 备用地址:http://ProCircle.q ...
- CDH 版本子节点启动问题
今天下午整整为了启动一个节点瞎忙活一下午,惨痛的教训还是记录下来吧,毕竟付出了代价.事情原委,一个同事在一台机器上占用了大量内存训练CTR点击率模型,而这台机器上部署了分布式Hadoop的一个data ...
- Java之装饰模式
1.装饰模式的理解 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 2.装饰模式由4种角色组成 (1)抽象构件(Componen ...
- Android _关于fragment切换重新加载的解决分享给大家
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment但是,这样会有一个问题 ,应该很多朋友都遇到过:每次切换的时候,Fragment都会重新实例化,也就是运行 ...
- 第一章-Javac编译器介绍
1.Javac概述 编译器可以将编程语言的代码转换为其他形式,如Javac,将Java语言转换为虚拟机能够识别的.class文件形式.而这种将java源代码(以.java做为文件存储格式)转换为cla ...
- UTF-8和GBK编码的区别
UTF-8:对英文使用8位(一个字节).中文使用24位(三个字节)编码.对于英文字符比较多的网站一般用utf-8来编码以节省空间:包含全世界所有国家需要用到的字符,其编码的蚊子可以在各国各种支持utf ...