
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用在大多数软件编程开发项目中都是会经常用到的一个编程开发技术,而本文我们就通过案例分析来简单了解一下,数据库锁模式与常见类型分享。
1、锁
事务隔离级别是并发控制的整体解决方案,其实际上是综合利用各种类型的锁和行版本控制,来解决并发问题。
2、锁模式
两种模式锁:排他锁(X锁)和共享锁(S锁):
排他锁也叫写锁.这种模式的锁防止资源的共享,用做数据的修改。
假如有事务T给数据A加上该锁,那么其他的事务将不能对A加任何的锁,所以此时只允许T对该数据进行读取和修改,直到事务完成将该类型的锁释放为止。
共享锁也可以叫读锁.该模式锁下的数据只能被读到,不能被修改。
如果有事务T给数据A加上共享锁后,那么其他事务不能对其加排他锁,只能加共享锁.加了该锁的数据可以被并发地读取.锁是实现并发的主要手段,很多都是由数据库自动管理,当事务提交后会自动释放锁。
再细分:
RS(行级共享锁,ROWSHARE):该模式下不允许其他的并行会话对同一张表使用排它锁,但允许其利用DML语名或Lock命令锁定同一张表中的其他记录.select...fromforupdate语名就是给记录加上了RS锁.
RX(行级排他锁,ROWEXCLUSIVE):该模式下允许并行会话对同一张表的其他数据进行修改,但不允许并行会话对同一张表使用排他锁.
S(共享锁,SHARE):该模式下,不允许会话更新表,但允许对表添加RS锁.
SRX(共享行级排他锁,SHAREROWEXCLUSIVE):该模式下,不能对同一张表进行DML操作,也不能添加S锁.
X(排他锁,EXCLUSIVE):该模式下,其他的并行会话不能对表DML和DDL操作,该表只能读.
3、乐观锁和悲观锁
乐观锁
乐观锁不会锁住任何东西,也就是说,它不依赖数据库的事务机制,乐观锁完全是应用系统层面的东西。
如果使用乐观锁,那么数据库就必须加版本字段,否则就只能比较所有字段,但因为浮点类型不能比较,所以实际上没有版本字段是不可行的。
悲观锁
悲观锁是指假设并发更新冲突会发生,所以不管冲突是否真的发生,都会使用锁机制。
悲观锁会完成以下功能:锁住读取的记录,防止其它事务读取和更新这些记录。其它事务会一直阻塞,直到这个事务结束。
悲观锁是在使用了数据库的事务隔离功能的基础上,独享占用的资源,以此保证读取数据一致性,避免修改丢失。
悲观锁可以使用RepeatableRead事务,它完全满足悲观锁的要求。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。