事务的介绍及用法
2411 点击·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.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 | |
![]() | ![]() |