数据库锁机制
2016-08-13 22:05
127 查看
共享锁和排他锁
共享锁S锁,又称为读锁,若事务T对数据对象A加上S锁,则事务T可以读取A但不能修改A,其他事务只能再对A加S锁,而不能加排他锁
X锁,直到T释放A上的S锁。这保证了其他事务可以读A,并且在T释放A上的S锁之前不能对A做任何更新。
排他锁
X锁,又称为写锁,若事务T对数据对象A加上X锁,则事务T可以读取A,也可以修改A,但是其他事务不能对数据对象A加任何锁
共享锁只用于表级,排他锁用于行级
数据库死锁的原因:若干事务相互等待对方释放锁,就会陷入无限等待状态,系统进入死锁
悲观锁和乐观锁
注意这里的悲观锁乐观锁与上面说的共享锁排他锁是不互斥的,这里的悲观乐观锁更多的强调加锁的力度和时机。悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。悲观锁假定其他用户企图访问或者改变你正在访问、改变的对象的概率很高,在悲观锁环境中,在改变对象之前就将对象锁住,直到提交所作的更改后才释放锁。悲观锁不论是行锁还是页锁,加锁的时间都比较长,这样会限制其他用户的访问,也就是说悲观锁的并发性不好。
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。乐观锁无法解决数据脏读的问题。乐观锁认为用户企图改变你的正在更新的对象概率很小,因此乐观锁直到你准备提交所作更改时才将对象锁住,当你读取以及更改对象时加不锁。因此乐观锁加锁的时间更较悲观锁更短,可以获得更好的并发访问性能。如果第二个用户恰好在第一个用户提交更改之前读取了该对象(即脏读),那么当他完成了自己的更改进行提交时,数据库就会发现该对象已经变化了,要求第二个用户重新读取该对象并作出更改。这说明在乐观锁环境中,会增加并发用户读取对象的次数。
相关文章推荐
- mongodb复制和分片
- Oracle绿色客户端(Instant Client)配置方法
- Memcache 安装 入门
- C#访问SQLite完整增删改查代码
- MySql安装 版本 mysql-5.7.14-winx64
- PL/SQL:结构、语句块、变量
- JDBC连接数据库的几种方法与简单解析
- SQL Server性能优化
- 项目一 国家电力项目思路总结
- 数据库中表的操作
- mysql常见的问题
- SPATIALITE 各版本数据库差异
- Mysql基本操作总结
- SCPPO(十四):Windows下Redis安装的那些事儿!
- Mongodb学习使用手册
- SQL连接查询和合并查询
- Redis深入之路(二)
- mysql之DDL操作--数据表
- 五,session数据写入memcached
- cascade 介绍与用法 ( oracle)