【共享锁】【读锁】共享锁(Share locks 简记为S锁)
【独占锁】(事务结束释放)【写锁】排它锁(Exclusive locks 简记为X锁)
【更新锁】(避免共享锁的死锁情况)
【封锁协议 】
1 级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。 1级封锁协议可防止丢失修改,并保证事务T是可恢复的。在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不 读"脏"数据。 2级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。2级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。
3级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。3级封锁协议除防止了丢失修改和不读'脏'数据外,还进一步防止了不可重复读。
【锁升级】
【悲观锁】
一、显式执行数据库系统的“独占锁”。直到事务结束时释放。
二、应用程序实现悲观锁:增加锁字段。
悲观锁假定当前事务操纵数据资源时,肯定还会有其他事务同时访问该数据资源,为了避免当前事务的操作受到干扰,先锁定资源。尽管悲观锁能够防止丢失更新和不可重复读这类并发问题,但是它影响并发性能,因此应该很谨慎地使用悲观锁。
【利用Hibernate的版本控制实现乐观锁】
递增整数,或者时间戳。
MySQL数据库锁定机制
http://www.cnblogs.com/ggjucheng/archive/2012/11/14/2770445.html
MySQL有三种锁的级别:页级、表级、行级。
- MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);
- BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;
- InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
- 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
- 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。