概述

    事务(transaction)是由查询和/或更新语句的序列组成。 用 begin、start transaction 开始一个事务,rollback 回滚事务,commit 提交事务。 在开始一个事务后,可以有若干个 SQL 查询或更新语句,每个SQL执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。事务一旦回滚,数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出,自然还是保持文件原来的样子。所以,事务可被视为原子操作,事务中的 SQL,要么全部执行,要不一句都不执行。注意

    1. MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

    使用方法

    1. 1、开启事务
    2. $db->beginTransaction();
    3. 2、根据结果决定回滚或者提交
    4. $db->rollback(); 或者 $db->commit();

    演示数据表 accounts

    1. DROP TABLE IF EXISTS `accounts`;
    2. CREATE TABLE `accounts` (
    3. `id` int(10) NOT NULL AUTO_INCREMENT,
    4. `name` varchar(20) DEFAULT NULL,
    5. `balance` int(10) DEFAULT NULL,
    6. PRIMARY KEY (`id`)
    7. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    8.  
    9. -- ----------------------------
    10. -- Records of accounts
    11. -- ----------------------------
    12. INSERT INTO `accounts` VALUES ('1', '张三', '1000');
    13. INSERT INTO `accounts` VALUES ('2', '李四', '0');

    事务演示

    1. //演示: 从张三账户转账给李四200元
    2. $db = db('accounts');
    3. //开启事务
    4. $db->beginTransaction();
    5. //扣除张三 200 元
    6. $db->where('id = ?', array(1))->field('balance', -200);
    7. //给李四账户充值 200元
    8. $res = $db->where('id = ?', array(2))->field('balance', 200);
    9. $rowCount = $db->rowCount();
    10. echo '观察更新后影响数据数量确保一定更新成功 ['.$rowCount.']<br />';
    11. //如果给李四账户充值 200元不成功则回滚
    12. if(!$res || $rowCount < 1){
    13. echo '回滚...';
    14. $db->rollback();
    15. }else{
    16. //成功则进行提交
    17. $db->commit();
    18. }

    原文: http://www.phpgrace.com/doc/info/327-2.html