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

 create table tbl_test(
id nvarchar(10),
name nvarchar(5)
);
insert into tbl_test values('','名字1');
update tbl_test set name='名字2' where id=''
update tbl_test set name='名字超过5字' where id='' --这句话会报错 将截断字符串或二进制数据。

上面的代码最后执行完,会将名字1改为名字2

加上事务

 begin transaction
update tbl_test set name='名字2' where id='';
update tbl_test set name='名字超过5字' where id='';
if @@error <> 0
begin
rollback transaction
end
else
begin
commit transaction
end

执行结果name字段的值还是名字1,第二句update执行失败了之后,第一句update也没有执行。

另一种写法:T-sql是有异常机制的

 begin try
begin transaction
update tbl_test set name='名字2' where id='';
update tbl_test set name='名字超过5字' where id='';
commit transaction
end try
begin catch
--select ERROR_NUMBER() as 错误代码
rollback transaction
end catch

sqlserver-事务处理的更多相关文章

  1. Sqlserver 事务处理模板

    USE StuDB GO /****** Object: StoredProcedure [dbo].[proc_live_send_answer_v4] Script Date: 06/20/201 ...

  2. SQLServer 学习相关资料整理【转】

    存储过程: SQL Server 存储过程 博客园上的一篇文章,讲解的非常详细,有测试代码,很实用. sqlserver存储过程中执行动态sql语句  The Curse and Blessings ...

  3. 第六节 ADO.NET

    ADO.NET是一组为.NET编程人员提供数据访问服务的类,封装在System.Data.dll 中,是.NET框架的一部分,它是一种数据访问技术. 使用SQLServer数据提供程序 类 说明 Sq ...

  4. SQLServer 存储过程嵌套事务处理

    原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...

  5. .Net和SqlServer的事务处理实例

    1,SqlServer存储过程的事务处理一种比较通用的出错处理的模式大概如下:Create procdure prInsertProducts( @intProductId int, @chvProd ...

  6. SqlServer:SqlServer(存储过程动态表查询(取消返回值),事务处理,批量还原sqlserver备份,强制删除被占用的数据库)

    1.存储过程动态表查询 USE [NETWORKING_AUDIT] GO /****** Object: StoredProcedure [dbo].[impConfigInfo] Script D ...

  7. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  8. SQLServer复制(二)--事务代理作业

    之前的一篇已经介绍了如何配置复制,介绍了发布者.分发者和订阅者以及事务日志运行的简单关系.其中提到了复制代理,我们这篇将详细介绍复制代理,它是什么?在事务复制的步骤中起到了什么作用? 代理和工作 首先 ...

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

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

  10. sqlserver索引小结

    1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子: 图书馆的例子:一个图书 ...

随机推荐

  1. wcf纯代码创建控制台应用

    https://svn.apache.org/repos/asf/incubator/stonehenge/contrib/stocktrader/dotnet/ stocktrader项目的dotn ...

  2. C++ Prime:指针

    指针与引用的区别:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象:其二:指针无需在定义时赋值.指针在块作用域内定义如果没有被初始化,也将拥有一个不确 ...

  3. squid透明代理+iptables防火墙,多网卡详细配置

    squid透明代理+iptables防火墙详细配置 看到很多人都在不停地问iptables+squid做透明代理的问题,鄙人不才,斗胆在此做统一解答.如有任何纰漏还望各位批评指教. ========= ...

  4. bzoj1334

    ..] of boolean;     a:..] of longint;     i,n,s,j,ans:longint; procedure sort(l,r: longint);   var i ...

  5. Linux学习笔记27——共享内存

    一 共享内存 共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空间中.其他进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址.如果某个进程向 ...

  6. ubuntu安装jdk1.8

    sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-i ...

  7. HDOJ/HDU 2700 Parity(奇偶判断~)

    Problem Description A bit string has odd parity if the number of 1's is odd. A bit string has even p ...

  8. Telephone directory - SGU 127(水)

    题目大意:有一个电话簿,每页最多纪录K行电话,现在有N个电话要记录在电话薄上,要求同页的电话号码的首位要相同,电话簿的前两页是纪录的别的东西,问最少需要多少页电话簿. 分析:直接求首位数字有多少个即可 ...

  9. Broken line - SGU 124(判断点与多边形的关系)

    题目大意:RT 分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面. 代码如下: ===================================== ...

  10. [转]C++ map容器用法

    C++ map的基本操作和使用 原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关 ...