灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:1845回复:0

事务的介绍及用法

楼主#
更多 发布于:2012-09-08 09:37


事务类似于java的线程的同步,作为一个单元执行。它有四大特性:原子性,隔离性,一致性,持久性。在SQL SERVER 2000里面还支持存储点的用法。大家都知道,事务是做为一个单元运行,要么全部执行,要么全部不执行。但是有时候我们可以保证事务的一部分可能正确执行,并且这些执行可以直接刷新到数据库里面。那么我们就可以在这个事务的中间部分设置一个或者多个存储点。这样在这个事务大单元里就分成了几个小部分。
如果上面的部分执行正确,下面的部分执行错误,那么就没必要回滚整个事务,只需要回滚到存储点的地方就可以了。下面请看一个带有存储点的事务执行过程。
--创建数据库
if exists(select name from master..sysdatabases
          where name='student')
    drop database student
go
create database student
go
use student
go
--创建表
if exists(select name from sysobjects
          where name='stu'and type='u')
   drop table stu
go
create table stu
(
    s_id int primary key,
    s_name char(20),
    age int not null default 25 ,
    b_id int
)
go
insert into stu values(1001,'andy',39,101)
insert into stu values(1002,'jacky',33,101)
insert into stu values(1003,'sandy',29,102)
insert into stu values(1004,'lray',19,102)
insert into stu values(1005,'jay',26,102)
insert into stu values(1006,'lucy',22,103)
select * from stu
--事务的操作www.atcpu.com
declare @status1 int
declare @status2 int
begin tran trstu
insert into stu values(6467,'hhh',28,101)
select @status1=@@error
save tran point
update stu
set s_name = '***ddddd'
--插入重复的主键值的话就会出错
insert into stu values(5167,'aa',21,102)
select @status2=@@error
if @status1<>0
rollback tran trstu
if @status2<>0
begin
print @status2
rollback tran point
end
commit tran trstu


喜欢0 评分0
游客

返回顶部