事务与锁学习目标?掌握事务?掌握锁一、事务?事务是并发控制的基本单位。所谓事务, 就是一个操作序列,这些操作要么都执行, 要么都不执行,它是一个不可分割的工作单位。?如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 、事务的特性?原子性?一致性?隔离性?持久性 、事务的分类?(1)自动提交事务?每条单独的语句都是一个事务。?(2)显式事务?每个事务均以 BEGIN TRANSACTION 语句显式开始,MIT 或 ROLLBACK 语句显式结束。?(3)隐式事务?在前一个事务完成时新事务隐式启动,但每 MIT 或 ROLLBACK 语句显式完成。通过 Set Implicit_Transactions On 命令。 、自动提交事务? SQLServer2005 将一切都作为事务来处理,如果用户没有定义事务,它会自动定义用户或应用程序各种数据库操作的事务,这称之为自动提交事务,也是 SQLServer2005 默认的事务处理模式。?如: create table aa a(int not null) ? Insert into aa values(1) ? Insert into aa values(null) ? Insert into aa values(2) ?其结果是第一和第三条语句插入,第二条失败? SQLServer2005 在自动提交事务工作模式下,每条语句本身就是一个事务 、显式事务?显示事务是执行的 SQL 语句之前增加 begin transaction ,事务提交采 mit transaction ,事务回滚采用 rollback transaction ,保留事务点采用 save transaction ?比如: begin transaction ? insert into aa values(1) ? insert into aa values(null) ? IF @***@ERROR <> 0 ? BEGIN ? rollback transaction ? return ? END ? insert into aa values(2) ? commit transaction ?因为第二条语句的出错,导致三条语句都不成功。插入的知识点: TRY...CATCH ?对 Transact-SQL 实现类似于 C# 和 C++ 语言中的异常处理的错误处理。 Transact-SQL 语句组可以包含在 TRY 块中。如果 TRY 块内部发生错误,则会将控制传递给 CATCH 块中包含的另一个语句组。?改造如下: ? begin transaction ? BEGIN TRY ? insert into aa values(1) ? insert into aa values(null) ? insert into aa values(2) ? commit transaction ? END TRY ? BEGIN CATCH ? print ' 错误号为:'+cast(@***@error as varchar(10)) ? print ' 错误内容为:'+ERROR_MESSAGE() ? rollback transaction ? END CATCH 保留点的使用?保留点是事务内部的一个标识,可以做事务的局部回滚。?改造如下: ? begin transaction ? insert into aa values(1) ? Save transaction aa ? insert into aa values(3) ? insert into aa values(2) ? rollback transaction aa ? Commit transaction ?其结果是后两条得到了回滚,而第一条数据进行了提交。 、隐式事务?要改变 SQLServer2005 的显式事务缺省设置为隐式,需要采用如下的语句: ? set implicit_transactions on ?这样就相当于每个 delete 、 update 、 insert 语句都开始一个 begin transaction, mit transaction 或者 rollback transaction 来进行结束事务。?可以尝试 delete from aa 后,再打开一个会话,去 select * from aa ,发现了什么? ?结论是阻塞锁的发生,所以对于一个事务的结束是网络编程对数据库操作的必须注意的
数据库事务与锁-课件(PPT讲稿) 来自淘豆网m.daumloan.com转载请标明出处.