您好,欢迎访问三七文档
2020/8/20第十三章事务与锁1第十三章事务与锁在理解事务的基础上掌握如何使用事务以及在什么情况下需要使用事务了解锁的相关问题2020/8/20第十三章事务与锁2一、事务1、事务的作用事务是并发控制的基本单位,它反映了现实世界中需要一个完整的单位提交的一项工作。将逻辑相关的一组操作捆绑在一起,以便服务器保持数据的完整性。注:要么全部处理;要么一行也不处理,恢复操作前状态。这就是事务处理的作用。2、事务处理控制语句SQLServer中可通过以下三个语句完成事务控制:(1)开始一个事务:begintran[saction]事务名(2)提交一个事务:commit[tran[saction]]事务(3)回滚一个事务:rollback[tran[saction]]事务名在数据库应用程序设计中,事务控制语句的一般用法是:第一步:Begintran事务名;第二步:对数据库进行增、删、改等操作第三步:提交事务或回滚。2020/8/20第十三章事务与锁3相关说明1、事务属性原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)2、回滚事务的说明执行了COMMITTRANSCATION语句后不能再回滚事务事务在执行过程中出现的任何错误,SQLServer实例将回滚事务系统出现死锁时会自动回滚事务由于其他原因(客户端网络连接中断、应用程序中止等)引起客户端和SQLServer实例之间通信的中断,SQLServer实例将回滚事务。在触发器中发出ROLLBACKTRANSCATION命令,将回滚对当前事务中所做的数据修改,包括触发器所做的修改对于嵌套事务,ROLLBACKTRANSCATION语句将所有内层事务回滚到最远的BEGINTRANSACTION语句,“事务名”也只能是来自最远的BEGINTRANSACTION语句的名称。2020/8/20第十三章事务与锁4二、锁概念:锁作为一种安全机制,用于控制多个用户的并发操作,防止用户读取正在由其他用户更改的数据或者多个用户同时修改同一数据,确保事务的完整性和数据的一致性。并发问题丢失或覆盖更新未确认的相关性(脏读)不一致的分析(不能重复读)幻象读2020/8/20第十三章事务与锁5SQLServer2000中锁定介绍为了减少锁的成本,应该根据事务所要执行的任务,合理选择锁的粒度,将资源锁定在适合任务的级别范围内。不同粒度的锁可以锁定的资源资源说明行行锁定,锁定表中的一行数据。键键值锁定,锁定具有索引的行数据。页页面锁定,锁定8KB的数据页或索引页区域区域锁定,锁定8个连续的数据页面或索引页面数据表表锁定,锁定整个数据表,包括所有数据和索引在内。数据库数据库锁定,锁定整个数据库2020/8/20第十三章事务与锁6锁的模式SQLServer使用不同的锁模式锁定资源,这些锁模式确定了并发事务访问资源的方式。常用的锁模式有:(1)共享(Shared)锁:用于只读取数据的操作。(2)更新(Update)锁:用于可更新的资源中,防止多个会话在读取、锁定及随后可能进行的资源更新时发生常见形式的死锁。(3)独占(Exclusive)锁:用于数据修改操作2020/8/20第十三章事务与锁7死锁锁机制的引入能解决并发用户的数据一致性问题,但因此可能会引起进程间的死锁问题。引起死锁的主要原因是,两个进程已各自锁隹一个页,但又要求访问被对方锁住的页。更一般的情况是,一个事务独占了其他事务正在申请的资源,且若干个这样的事务形成一个等待圈。例如用户A和用户B按照下表的时间顺序执行操作,在T3时间点将会产生死锁。T1T2T3A查询TAB1表的信息(使用HOLDLOCK选项)修改TAB2表的数据B查询TAB2表的信息(使用HOLDLOCK选项)修改TAB1表的数据说明:HOLDLOCK选项表示将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。2020/8/20第十三章事务与锁8死锁的排除SQLServer能自动发现并解除死锁。当发现死锁时,它会选择其进程累计的CPU时间最少者所对应的用户作为“牺牲者”(令其夭折),以让其他进程能继续执行。此时SQLServer发送错误号1205(即@@error=1205)给牺牲者。在并发操作中,为了避免死锁,建议采用以下措施:⑴最大限度地减少保持事务打开的时间长度;⑵按同一顺序访问对象;⑶尽量避免事务中的用户交互;⑷保持事务简短并在一个批处理中。
本文标题:事务与锁
链接地址:https://www.777doc.com/doc-6816744 .html