事务的介绍及用法

2014-11-24 07:29:12 · 作者: · 浏览: 0

事务类似于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.2cto.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

摘自 Java教程