# 事务处理
## **概述**
事务(transaction)是由查询和/或更新语句的序列组成。 用 begin、start transaction 开始一个事务,rollback 回滚事务,commit 提交事务。 在开始一个事务后,可以有若干个 SQL 查询或更新语句,每个SQL执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。事务一旦回滚,数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出,自然还是保持文件原来的样子。所以,事务可被视为原子操作,事务中的 SQL,要么全部执行,要不一句都不执行。
## **注意**
~~~
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
~~~
## **使用方法**
~~~
1、开启事务
$db->beginTransaction();
2、根据结果决定回滚或者提交
$db->rollback(); 或者 $db->commit();
~~~
## **演示数据表 accounts**
~~~
DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`balance` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of accounts
-- ----------------------------
INSERT INTO `accounts` VALUES ('1', '张三', '1000');
INSERT INTO `accounts` VALUES ('2', '李四', '0');
~~~
## **事务演示**
~~~
//演示: 从张三账户转账给李四200元
$db = db('accounts');
//开启事务
$db->beginTransaction();
//扣除张三 200 元
$db->where('id = ?', array(1))->field('balance', -200);
//给李四账户充值 200元
$res = $db->where('id = ?', array(2))->field('balance', 200);
$rowCount = $db->rowCount();
echo '观察更新后影响数据数量确保一定更新成功 ['.$rowCount.']<br />';
//如果给李四账户充值 200元不成功则回滚
if(!$res || $rowCount < 1){
echo '回滚...';
$db->rollback();
}else{
//成功则进行提交
$db->commit();
}
~~~
- 快速开始
- phpGrace 介绍
- 环境需求及伪静态设置
- 目录结构及命名规则
- 初始化、原理、分组
- 控制器与路由
- 创建控制器
- 基础控制器
- URL解析规则
- 自定义路由
- URL生成
- 数据与模型
- 数据库配置
- 获取数据库操作对象
- 数据库操作(CURD)
- 数据分页详解
- 事务处理
- 数据验证
- 表单令牌及验证
- 模型创建与调用
- 视图
- 视图文件创建
- 调用、引用视图
- 视图路径模式
- 会话机制
- Cookie 操作
- Session[文件型 ]
- Session [memcache]
- Session [redis]
- 缓存机制
- 缓存概述及配置
- 文件型缓存
- Memcache 形式的缓存
- Memcache介绍
- Memcache安装
- 开启PHP Memcache
- PHP操作Memcache
- Memcache来保存Session
- Memcached图形化管理工具
- Memcache安全相关
- redis 形式的缓存
- Redis介绍
- Redis安装
- 开启 PHP Redis
- Redis图形化管理工具
- PHP操作Redis
- 配置、常量、语言
- 全局配置、分组配置
- 预定义常量
- 语言包使用说明
- 工具
- 函数小工具
- 安全与扩展
- 框架部署安全
- 常规安全
- 扩展说明
- 常用类库
- 图片处理类
- 文件上传类
- IP地址获取类
- 验证码绘制类
- 日期时间换算类
- md5加密类
- 服务器信息类
- curl通信类
- 文件下载类
- 类反射工具
- XML生成与解析
- 汉字转拼音类
- 文件夹操作
- 人民币大写转换类
- 第三方类库
- QQ登录 - web版
- 微信扫码登录-网站
- excel 读写操作
- 阿里云短信接口
- SMTP 邮件发送
- 二维码生成类
- word、pdf 生成类
- 阿里云静态云存储接口类