sqlserver-事务处理
事务的概念:简单说就访问并可能更新数据库中各种数据项的一个程序执行单元,一旦开启事务,所有对数据的操作要么全部执行,要么全部都不执行。单条sql语句本身就是一个事务.
事务的属性:
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有4个属性,称为原子性(Atomic)、 一致性(Consistent)、隔离性(Isolated)、持久性(Durable),简称ACID属性,只有这样才能构成一个事务。
原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性:两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
工作开发过程中对事务的依赖性很强,复杂一点的sql操作一般都离不开事务.
举个很简单的例子,银行转账是简单可以分为两个步骤
如:账号A向账号B转1000元钱。
1、账号B+1000元;
2、账号A-1000元;
这两步是不可分的,假如账号B+1000元后,执行第二步发现账号A余额不足时(当然实际开发中会先判断余额,这里是假设),执行失败,那么账号B就多出了1000元,而账号A却没减去1000元。
有了事务我们就可以保证这两步要么全部执行,要么全部不执行。
伪代码:
begin 事务
update 账号表 set money=money+1000 where 账号=账号B;
update 账号表 set money=money-1000 where 账号=账号A;
if 程序报错
rollback 事务;
else
commit 事务;
--------------------------------------------------------------------------------------------------------------------------------
sql代码
1 create table tbl_test( 2 id nvarchar(10), 3 name nvarchar(5) 4 ); 5 insert into tbl_test values('001','名字1'); 6 update tbl_test set name='名字2' where id='001' 7 update tbl_test set name='名字超过5字' where id='001' --这句话会报错 将截断字符串或二进制数据。
上面的代码最后执行完,会将名字1改为名字2
加上事务
1 begin transaction 2 update tbl_test set name='名字2' where id='001'; 3 update tbl_test set name='名字超过5字' where id='001'; 4 if @@error <> 0 5 begin 6 rollback transaction 7 end 8 else 9 begin 10 commit transaction 11 end
执行结果name字段的值还是名字1,第二句update执行失败了之后,第一句update也没有执行。
另一种写法:T-sql是有异常机制的
1 begin try 2 begin transaction 3 update tbl_test set name='名字2' where id='001'; 4 update tbl_test set name='名字超过5字' where id='001'; 5 commit transaction 6 end try 7 begin catch 8 --select ERROR_NUMBER() as 错误代码 9 rollback transaction 10 end catch
转载于:https://www.cnblogs.com/fnz0/p/5444929.html
sqlserver-事务处理相关推荐
- PHP写sqlserver事务,php调用sqlserver存储过程使用事务处理
第一次编写 sqlserver存储过程并在php里调用,把脑瓜都整大了,奋战了一天多最后还是搞定了. 实现功能:在 sqlserver里面实现事务处理,保证数据库操作安全: 接收sqlserver存储 ...
- SQLServer学习-- SQLServer
SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行M ...
- (转载)jdbc事务处理
本文转载自:http://apzx2007.blog.163.com/blog/static/70507440200910236014880/ 在JDBC的数据库操作中,一项事务是由一条或是多条表达式 ...
- [转]SQLServer和Oracle,存储过程区别,常用函数对比
本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...
- WebService的事务处理 (转)
因为这个问题讨论起来内容比较多一些,所以另开一个话题. 如果你只是要解决两个系统之间的事务同步问题,可以采用判断服务是否成功的办法来解决,即: * A系统开始自己的事务,处 ...
- 转载:SqlServer数据库性能优化详解
本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...
- 总结sqlserver数据库性能优化相关的注意事项
一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...
- sqlserver 两个数据库同步
以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户. 2.在S ...
- sqlserver sql语句|经典sql语句|实用sql语句
sqlserver sql语句|经典sql语句|实用sql语句 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop databa ...
- SQL SERVER 事务处理
<1>.事务的概念 事务是一个不可分割的工作逻辑单元. <2>.为什么使用事物 可以防止错误的发生. <3>.事物的作用 ...
最新文章
- windows2008下VS2008发布失败
- python database is locked_sqlite遇到database is locked问题的完美解决
- Linux下最快速共享目录的方法
- 在'for'循环中获取索引
- [转载] 应用于负载均衡的一致性哈希及java实现
- qt4.7.0 交叉编译环境搭建经验总结
- 枚举 函数 c语言,在C语言中函数中使用枚举类型和结构
- springmvc应用-自定义参数解析器
- XSS测试平台源码——免费分享
- DSP2812学习笔记-Flash固化操作
- python控制小爱同学_从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!...
- 改变学习方式,改变一生-陈光超强逻辑记忆法笔记
- 5W1H分析法和5W2H分析法
- linux添加jetdirect协议,如何设置 HP JetDirect 设备的网络安全性?
- 洛谷 P3620 - P3621 数据备份、风铃、动物园(APIO 2007)
- mac 系统怎么更改 pip 源
- OpenCV实现图像的裁块与拼接
- 架构 - 单点登录 - Springboot 模拟单点登录
- UPS=蓄电池+逆变器?
- UML-----包图
热门文章
- Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)
- 2095 : 我只看看不写题(贪心)
- 教你怎么在vi和vim上查找字符串
- Leetcode题库 144.二叉树的前序遍历(递归 C实现)
- 大话数据结构之算法 时间复杂度
- Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量
- J2EE与.NET技术架构的比较
- linux中Shell历史命令记录文件的路径是什么
- Liferay Portal额外研究-银狐999
- jQuery 源码分析笔记(3)