数据库锁机制
数据库锁的种类一般分为两种:一种是悲观锁,一种乐观锁。
悲观锁:
又称排他锁,具有很强的排他性,在数据处理过程中会将数据出于锁定状态,
悲观锁的实现往往是依靠数据库提供的锁机制。关系数据库锁机制有:
行级锁,标级锁,读锁,写锁,都是在操作之前先上锁。
悲观锁的隔离级别可以看做可重复读。
乐观锁:
相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制,大多是基于版本
号( Version )记录机制实现,而不需要借助数据库的锁机制。
乐观锁的实现
乐观锁的本质不是锁,其隔离级别可以看作为读未提交
悲观锁的优缺点:
悲观锁的优点是能避免冲突的发生。
悲观锁的缺点是开销较大,而且加锁时间较长,对于并发的访问性支持不好。
乐观锁的优缺点:
乐观锁的优点是避免了长事务中的数据库加锁解锁开销,大大提升了大并发量下的系统整体性能表现。
乐观锁的缺点是只能在提交数据时才发现业务事务将要失败,如果系统的冲突非常的多,而且一旦冲突就要因为重新计算提交而造成较大的代价的话,乐观锁也会带来很大的问题。
乐观锁与悲观锁的选择:
乐观锁适用多读场景。
悲观锁适用于多写的场景,避免了产生冲突。
注意:
MyISAM 和 InnoDB 关于锁方面的区别是什么
MyISAM 默认用的是表级锁,不支持行级锁
InnoDB 默认用的是行级锁,也支持表级锁
mySql默认引擎是InnoDB