- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
事务与锁 学习目标 掌握事务 掌握锁 一、事务 事务是并发控制的基本单位。所谓事务,就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 1.1、事务的特性 原子性 一致性 隔离性 持久性 1.2、事务的分类 (1)自动提交事务 每条单独的语句都是一个事务。 (2)显式事务 每个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。 (3)隐式事务 在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成。 通过Set Implicit_Transactions On命令。 1.2.1、自动提交事务 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在自动提交事务工作模式下,每条语句本身就是一个事务 1.2.2、显式事务 显示事务是执行的SQL语句之前增加begin transaction,事务提交采用commit 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 其结果是后两条得到了回滚,而第一条数据进行了提交。 1.2.3、隐式事务 要改变SQLServer2005的显式事务缺省设置为隐式,需要采用如下的语句: set implicit_transactions on 这样就相当于每个delete、update、insert语句都开始一个begin transaction,那么也需要commit transaction或者rollback transaction来进行结束事务。 可以尝试delete from aa后,再打开一个会话,去select * from aa,发现了什么? 结论是阻塞锁的发生,所以对于一个事务的结束是网络编程对数据库操作的必须注意的地方,否则会造成网络的瘫痪。 采用set implicit_transactions off关闭隐式事务。 1.3 设置事务隔离级别
文档评论(0)