事务的概念:简单说就访问并可能更新数据库中各种数据项的一个程序执行单元,一旦开启事务,所有对数据的操作要么全部执行,要么全部都不执行。单条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-事务处理相关推荐

  1. PHP写sqlserver事务,php调用sqlserver存储过程使用事务处理

    第一次编写 sqlserver存储过程并在php里调用,把脑瓜都整大了,奋战了一天多最后还是搞定了. 实现功能:在 sqlserver里面实现事务处理,保证数据库操作安全: 接收sqlserver存储 ...

  2. SQLServer学习-- SQLServer

    SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行M ...

  3. (转载)jdbc事务处理

    本文转载自:http://apzx2007.blog.163.com/blog/static/70507440200910236014880/ 在JDBC的数据库操作中,一项事务是由一条或是多条表达式 ...

  4. [转]SQLServer和Oracle,存储过程区别,常用函数对比

    本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...

  5. WebService的事务处理 (转)

    因为这个问题讨论起来内容比较多一些,所以另开一个话题.       如果你只是要解决两个系统之间的事务同步问题,可以采用判断服务是否成功的办法来解决,即:         * A系统开始自己的事务,处 ...

  6. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  7. 总结sqlserver数据库性能优化相关的注意事项

    一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...

  8. sqlserver 两个数据库同步

    以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户. 2.在S ...

  9. sqlserver sql语句|经典sql语句|实用sql语句

    sqlserver sql语句|经典sql语句|实用sql语句 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop databa ...

  10. SQL SERVER 事务处理

    <1>.事务的概念           事务是一个不可分割的工作逻辑单元. <2>.为什么使用事物           可以防止错误的发生. <3>.事物的作用   ...

最新文章

  1. windows2008下VS2008发布失败
  2. python database is locked_sqlite遇到database is locked问题的完美解决
  3. Linux下最快速共享目录的方法
  4. 在'for'循环中获取索引
  5. [转载] 应用于负载均衡的一致性哈希及java实现
  6. qt4.7.0 交叉编译环境搭建经验总结
  7. 枚举 函数 c语言,在C语言中函数中使用枚举类型和结构
  8. springmvc应用-自定义参数解析器
  9. XSS测试平台源码——免费分享
  10. DSP2812学习笔记-Flash固化操作
  11. python控制小爱同学_从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!...
  12. 改变学习方式,改变一生-陈光超强逻辑记忆法笔记
  13. 5W1H分析法和5W2H分析法
  14. linux添加jetdirect协议,如何设置 HP JetDirect 设备的网络安全性?
  15. 洛谷 P3620 - P3621 数据备份、风铃、动物园(APIO 2007)
  16. mac 系统怎么更改 pip 源
  17. OpenCV实现图像的裁块与拼接
  18. 架构 - 单点登录 - Springboot 模拟单点登录
  19. UPS=蓄电池+逆变器?
  20. UML-----包图

热门文章

  1. Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)
  2. 2095 : 我只看看不写题(贪心)
  3. 教你怎么在vi和vim上查找字符串
  4. Leetcode题库 144.二叉树的前序遍历(递归 C实现)
  5. 大话数据结构之算法 时间复杂度
  6. Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量
  7. J2EE与.NET技术架构的比较
  8. linux中Shell历史命令记录文件的路径是什么
  9. Liferay Portal额外研究-银狐999
  10. jQuery 源码分析笔记(3)