博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii1框架,事务使用方法
阅读量:6501 次
发布时间:2019-06-24

本文共 1530 字,大约阅读时间需要 5 分钟。

Yii1框架事务操作方法如下:

$transaction= Yii::app()->db->beginTransaction();//创建事务$transaction->commit();//提交事务$transaction->rollback();//回滚事务

下面使用try,throw,catch配合使用事务:

1 // 以下实例将需要事务处理的操作放进try里 2 $transaction = Yii::app()->db->beginTransaction(); 3 try { 4     $a = XXX::model()->findByPk(X); 5     $a->x = 1; 6     $a->setAttribute('字段名', '值') 7     //如果仅仅写为:$a->save(); 那么就算保存失败,也不会去执行catch里的内容 8     if(!$a->save()){ 9         throw new CException('这里保存失败了,通知事务回滚');10     }11     12     $b = YYY::model()->findByPk(Y);13     $b->y = 2;14     $b->setAttribute('字段名', '值')15     if(!$b->save()){16         throw new CException('这里保存失败了,通知事务回滚');17     }18     19     //这里也可以调用其他方法,同样适用于事务,提交之前,对数据库的更改不可见23     24     $transaction->commit(); //提交事务会真正的执行数据库操作25 } catch (Exception $e) {26     //如果操作失败, 数据回滚27     $transaction->rollback(); 28 }

特别需要注意的是:我们之所以使用事务的目的,就是为了保证在一个代码块里面执行多个表的数据操作(新增,删除,修改)要么都成功,万事大吉,如果其中一个不成功,则撤销之前所有的操作,这里成功的意思不是指sql语句执行成功,而是说的相对应的数据操作要成功,该增加的要增加成功,该更新的要更新成功,该删除的要删除成功,当然了,如果在执行的过程中抛了异常,sql语句未执行成功,那最终执行影响成功的行数肯定是0。

在实际项目过程中,update table set 字段名 = 值 where id = 1,只要sql语句语法正确,但是id = 1 这条数据是不存在的,那么执行这条sql语句也是会成功的,只不过返回的影响的行数是0,所以我们在事务里面判断成不成功,不能以执行的结果为标准,而应该以执行成功影响的行数为标准。

例如一个事务里面要操作3个表的数据:

1 insert into table1 (字段1,字段2) values (值1,值2);(Affected rows: 1)2 update table2 set 字段 = 值 where id = 1;(Affected rows: 0)3 delete from table3 where id = 1;(Affected rows: 1)

单纯的执行这3个语句都是成功的,但是table2.id = 1 这条数据如果不存在,理论上要第二个更新语句成功了,才能执行第三个删除语句,所以就需要判断执行成功和影响的行数。

转载于:https://www.cnblogs.com/firstlady/p/10649320.html

你可能感兴趣的文章
命名难,难于上青天
查看>>
socket在windows下和linux下的区别的网络文摘
查看>>
Redis3学习笔记
查看>>
《Gradle 系列》- Gradle构建Web项目
查看>>
将javaBean转换为map
查看>>
最近的一些感想!
查看>>
outlook无法加载加载项
查看>>
企业ERP软件选型该何去何从
查看>>
spring-core组件详解——类型转换系统
查看>>
mysql8.0 mysqld: File './binlog.index' not found
查看>>
C语言扩展Python(二)
查看>>
window.addEventListener介绍说明
查看>>
js获取节点
查看>>
jq复习心得
查看>>
去掉EM标签斜体样式
查看>>
触摸事件&手势识别
查看>>
NoSQL数据库笔谈(转)
查看>>
gem sources
查看>>
推荐大家一个比较好的弹出层效果
查看>>
Spark Python 快速体验
查看>>