本文共 1487 字,大约阅读时间需要 4 分钟。
begin transaction graduateuse library1godelete from Reader where Rno='R05'delete from Borrow where Rno='R05'gocommit transaction graduategobegin transaction borrow1use library1godeclare @Bno nchar(10),@num float,@Borrnum int,@Rno nchar(10),@BorrowDate dateselect @BorrowDate=getdate()select @Rno=Rno from Reader where Rname='李伟'select @Borrnum=Borrnum from Borrow order by Borrnum +1select @Bno=Bno from Book where Btitle='数据结构'select @num=COUNT(Bno)from Borrow where Bno=@Bno and ReturnDate is nullif @num<5begininsert into Borrow(Borrnum,Rno,Bno,BorrowDate)values(@Borrnum,@Rno,@Bno,@BorrowDate)commit print'李伟可以借阅数据结构'endelsebeginrollback transactionprint'此书已经被借阅完'endgo
commit就是将数据库中的数据提交到回滚段中,会覆盖原先数据
rollback就是将回滚段中的数据回滚到数据库中,不会覆盖数据,不管先前有没有设置回滚点,rollback回滚的数据都不会变,除非commit覆盖了原先的数据
由第二题可以清楚地看出来Read uncommitted
读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。可能会脏读。 Read committed 读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。 可能会不可重复读 Repeatable read 重复读,就是在开始读取数据(事务开启)时,不再允许修改操作 可能会幻读 Serializable 序列化 Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。 设计的实验:在两个查询窗口中分别创建名称为 Trans1和trans2的事务,在trans1中先后设置不同的事务隔离级别,执行两次查询语句,在trans2的事务中执行更新语句,比较执行结果。begin transaction trans1use library1goset transaction isolation level repeatable readselect *from Reader where Rname='王小明'waitfor delay'00:00:10';select *from Reader where Rname='王小明'gocommit transaction trans1gobegin transaction trans2use library1goupdate Reader set Rage=24 where Rname='王小明'gocommit transaction trans2go
转载地址:http://fvcki.baihongyu.com/