事务

本文介绍了数据库中的事务处理过程,包括开始、提交、回滚事务及事务保存点等内容,并详细阐述了并发控制中的封锁机制,如共享封锁、独占封锁和更新封锁等,以及意向锁的概念,最后讨论了死锁问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 事务处理:

1)开始事务(begin transaction)

 2)提交事务(commit transaction) 

3)回滚事务(rollback transaction)

4)事务保存点(save transaction savepoint_name、rollback transaction savepoint_name、set implicit_transactions on/set implicit_transactions off)

并发控制(封锁/死锁):

封锁是并发控制的主要技术。其基本思想是:当需要查询或更新数据时,先对数据进行封锁,以避免来自其他事务的干扰。数据库管理系统一般提供三种封锁机制,即共享封锁、独占封锁和更新封锁。封锁的对象既可以使关系,也可以是元祖。1)共享封锁(S封锁)是为读操作设置的一种封锁,所以也称读封锁,在读数据的过程中,不允许其他用户对该数据进行任何修改操作。2)独占封锁(X封锁)是为修改操作设置的一种封锁,也称为写封锁,这是最严格的一类封锁。在需要对表进行插入、删除或更新操作时,应该使用独占封锁。3)在不插入或删除的情况下,当需要对一个记录或一组记录进行更新时使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改同一记录。有些封锁在执行完相应操作后就自动释放封锁,有些封锁则保持到事务结束时才释放。

SQL Server的封锁操作通过WITH子句完成,该短语可以在select、insert、update和delete等语句中制定锁定的方式和范围。

如:select * from customers with(tablock holdlock)

tablock:表示共享封锁,在读完数据后立刻释放封锁。

holdlock:与tablock一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放锁。

nolock:不进行封锁,此关键词仅应用于select语句。

tablockx:对表进行独占封锁。

updlock:对表中的制定元祖实施更新封锁,实施更新封锁后其他事务可以对同一表中的元祖也实施更新封锁,但是不允许对表进行共享封锁和独占封锁。


为了提高并发性能,数据库管理系统还支持一种意向锁(Intension Lock)的机制。

意向锁:

1)意向共享(IS)

2)意向排他(IX)

3)共享意向排他(SIX)。

为避免干扰而使用封锁,但是如果封锁不当,则会出现死锁问题。如两个事务A和B,为完成某个事务都需要封锁客户和产品两个关系,这两个事务正好按照交错序列执行,结果两个程序都因为等待对方释放资源而产生死锁。

为避免死锁,通常采取两种方法:

1)相同顺序法:所有的用户程序约定都按相同的顺序来封锁表。

2)一次封锁法:为了完成一个事务,一次性封锁所需要的全部表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈极简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值