事务

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

--事务的操作

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 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值