当前位置: 首页 > 编程日记 > 正文

yii1框架,事务使用方法

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

相关文章:

竖直菜单 html,jQuery实现的网页竖向菜单效果代码

本文实例讲述了jQuery实现的网页竖向菜单效果代码。分享给大家供大家参考。具体如下:这是一款基于jQuery实现竖向的网页菜单代码,可折叠展开的二级网页菜单,修改一下可用在后台管理中,显示在左侧的那种管理菜单。jquery加入后方便…

可以检验计算机配置的游戏软件,检测游戏配置的软件-有没有自己检验电脑配置是否符合游戏要求配置 – 手机爱问...

2018-03-28电脑配置是否够好如果楼主你这个配制已经配了的话就没什么好说的了 如果你没配 今天是别人给你写的话 那就千万别配 因为根本是一套垃圾东西 给你介绍一套 CPU:5200 够了 主板:七彩红 770 370 比华硕M2N68 400 NF芯片的划算 还可以组成3A平台 …

Linux实战教学笔记32:企业级Memcached服务应用实践

一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码。从软件名…

嵌入式开发入门(2)

开发平台和硬件设备。我给的只是一种入门知识,具体如何应用请自助思考。所以请不要想着和我搭建同样的硬件平台。你要学习的是入门知识,换个芯片你一样可以这样做。 Ps:如果你想搭建试验平台直接买STM32F103的开发板,淘宝一把一把…

计算机四级网络工程题库,2016计算机四级网络工程师题库

2016计算机四级网络工程师题库一、选择题1、 以下关于OSPF协议技术特征的描述中,哪个是错误的?A.OSPF协议使用层次结构的区域划分B.它将一个自治系统内部划分成若干区域与主干区域(backbone area.C.主干区域连接多个区域,主干区域内部的路由器叫做主干路…

英语计算机作文初中.,初中英语作文:电脑游戏

Computer Games电脑游戏Computer games is a hot topic nowadays. Some people hold that it is bad. And others hold that it is good. In my view, whether good or bad is determined by the players.现在,电脑游戏是一个非常火的话题。一些人认为电脑游戏是不好…

计算机英语缩写AGP,IT行业常用计算机缩略语

IT行业常用计算机缩略语导语:信息技术缩写为IT,是主要用于管理和处理信息所采用的各种技术的总称。下面是YJBYS小编收集整理的IT行业常用计算机缩略语,希望对你有帮助!ADC     Analog-to-Digital Conventer      模数转换器ADO  …

山东计算机类好的民办大学,山东四大坑人学校-山东坑人的民办大学(野鸡大学)...

选择科目测一测我能上哪些大学选择科目领取你的专属报告>选择省份关闭请选择科目确定v>山东省作为高考大省,每年考生的竞争力很大,因此在选择院校的时候更需要考虑清楚。坊间传闻,“山东十大垃圾大学”是非常坑人的,那么山东…

java中数组的一些笔记

数组(相同数据类型的集合):是引用数据类型,数组的中的每个元素相当于数组的成员变量int [] num/ int num[]int nums [] new int [5];//创建了数组的对象并且指定了数组的长度。数组的长度一旦指定就不能更改index 下标 索引 从零…

计算机组成 试题,计算机组成典型试题及答案

计算机组成典型试题及答案计算机组成的任务是在指令集系统结构确定分配给硬件系统的功能和概念结构之后,研究各组成部分的内部构造和相互联系,那么计算机组成原理考试考什么呢?下面yjbys小编为大家分析计算机组成原理典型试题及答案如下:1.在计算机内部…

15-11-23:system指令

CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr.msc:证书管理实用程序 4. c…

J2EE的13种核心技术规范

J2EE主要用于创建可扩展的企业应用,包括13种核心技术规范: 1. JDBC(Java Database Connectivity,Java数据库连接) JDBC以一种统一的方式对各种各样的数据库进行存取,JDBC定义了4中不同的驱动程序&#xff1…

计算机教师简介50字,教师风采个人简介50字数.docx

教师个人简介 50 字大全例一:大家好,我叫王力央。今年 12 岁了,我有很多的兴趣比如:跳绳、游泳、看书、写字和玩耍。我 喜欢的东西也很多:水果、蔬菜、大螃蟹、大龙虾。大家要多吃蔬菜少吃油炸食品身体才能强壮、健康。…

visio 画类图时 方法里如何加参数

鼠标双击类(打开属性对话框)-->(类别)操作-->属性-->(类别)参数-->(添加参数)转载于:https://www.cnblogs.com/azhqiang/p/4991907.html

获取应用程序路径信息

//应用程序的可执行文件的路径 string apppath Application.ExecutablePath; //指定路径字符串的父目录信息,即当前目录的上一级目录 string str Path.GetDirectoryName(apppath); //指定路径字符串的扩展名 string …

jquery实现返回顶部按钮和scroll滚动功能[带动画效果] 转载

转载自&#xff1a;老驴的博客 jQuery脚本&#xff1a; 1 <script type"text/javascript">2 $(function() {3 var scrollDiv document.createElement(div);4 $(scrollDiv).attr(id, toTop).html(^ 返回顶部).appendTo(body);…

海思涵科技WIFI认证服务器不在线,在海思平台外加一个usb wifi模块,mt7601 加载ok,配置网络ok,但不能ping通?...

请教下&#xff1a;我用mt7601 usb wifi模块加载驱动 配置网络后经常打印PeerBeaconAtJoinAction(): Set CentralChannel1PeerBeaconAtJoinAction(): HT-CtrlChannel5, CentralChannel>5PeerBeaconAtJoinAction(): Set CentralChannel5PeerBeaconAtJoinAction(): HT-CtrlCha…

关于ognl+struts-tag与el+jstl互相代替,以及el和jstl的学习笔记

昨晚在晚上看了许多文章&#xff0c;众多大牛说OGNL性能不行云云&#xff0c;乍一看似乎惨不忍睹&#xff0c;如下图&#xff1a; 于是考虑是否能使用ELJSTL代替实现前台的标签。 以最近测试用的简单留言板的查看文章页面为例&#xff0c;以下皆省略getter&#xff0c;setter方…

六年级计算机word处理,六年级上信息技术教案Word大变身用Word制作网页河大版

《六年级上信息技术教案Word大变身用Word制作网页河大版》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《六年级上信息技术教案Word大变身用Word制作网页河大版(2页珍藏版)》请在人人文库网上搜索。1、第 1 课 Word 大变身用 Word 制作网页教学内容&#xff1a;教学目…

android4.4 添加快捷开关(以截屏为例)

A&#xff0c;frameworks\base\packages\SystemUI\res\values\config.xml 添加&#xff1a; <bool name"quick_settings_show_screenshot">true</bool> B&#xff0c;frameworks\base\packages\SystemUI\res\values\strings.xml 添加&#xff1a;<str…

两台ubuntu虚拟机环境下hadoop安装配置

http://blog.itpub.net/26978437/viewspace-730136/按照上几篇的内容&#xff0c;安装好两台ubuntu虚拟机之后&#xff0c;首先确定好哪台机子做namenode&#xff0c;哪台做datanode&#xff0c;打开终端,输入&#xff1a;$sudo vi /etc/hosts 在打开的文件中输入主机名和IP地址…

记录程序运行时间

long currentTimeMills()返回以毫秒为单位的当前时间 long nanoTime() 返回最准确的可用系统计时器的当前值&#xff0c;以毫微秒为单位. 测试某些代码执行的时间长度&#xff1a; long startTime System.nanoTime();// ... the code being measured ...long estimatedTime S…

绝对定位下margin的作用

以前一直对绝对定位下的margin作用很模糊&#xff0c;今天细看一下 不使用top,left&#xff0c;margin等 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

战地1如何修改服务器地址,《战地1》服务器加入方法一览

《战地1》发布已经有一段时间了&#xff0c;今天小编要为大家带来的是玩家“黑肉佐罗”分享的《战地1》服务器加入方法一览&#xff0c;感兴趣的玩家赶紧一起来看看吧!战地风云系列正统续作战地1问世已经有几个礼拜了&#xff0c;游戏怎么样&#xff0c;我想也不用多说&#xf…

css如何设置dialog,css-dialog提示

内容不完善内容不完善内容不完善内容不完善内容不完善确定BackGround.jsimport styled from styled-components;const BackGround styled.divbackground-color: rgba(19, 21, 26, 0.6);opacity: 1;z-index: 1001;top: 0;left: 0;right: 0;bottom: 0;position: absolute;;expor…

1356服务器性能,Intel发布4款LGA1356插口服务器处理器

Intel发布了4款LGA 1356插口的处理器&#xff0c;它们分别是Xeon E5-2449L和E5-1410、Pentium 1403和1407。Xeon E5-2449L是一款8核16线程的处理器&#xff0c;20MB三级缓存&#xff0c;同时它还具有Xeon E5-2400系列最低的TDP&#xff0c;仅为50W&#xff0c;但为了达到这个功…

二分图匹配匈牙利算法DFS实现

1 /**\2 | 二分图匹配&#xff08;匈牙利算法DFS 实现&#xff09;3 | INIT: g[][]邻接矩阵;4 | CALL: res MaxMatch ();5 | 优点&#xff1a;实现简洁容易理解&#xff0c;适用于稠密图&#xff0c;DFS 找增广路快。6 | 找一条增广路的复杂度为O&#xff08;E &#…

十大Intellij IDEA快捷键转

Intellij IDEA中有很多快捷键让人爱不释手&#xff0c;stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱&#xff0c;想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键&#xff0c;这次就按照我日常开发时的使用频率&#xff0c;简单分类列一下我最喜欢的…

Java和.NET使用DES对称加密的区别

Java和.NET的系统类库里都有封装DES对称加密的实现方式&#xff0c;但是对外暴露的接口却各不相同&#xff0c;甚至有时会让自己难以解决其中的问题&#xff0c;比如Java加密后的结果在.NET中解密不出来等&#xff0c;由于最近项目有跨Java和.NET的加解密&#xff0c;经过我的分…

web.config配置

在config中配置自己项目中的用户控件&#xff1a; <pages> <controls> <add tagPrefix"fish" tagName"MainMenu" src"~/Controls/MainMenu.ascx" /> <add tagPrefix"fish" tagName"PageHeader" src&qu…