乐观锁
默认认为不会有冲突,等执行的时候再确认是否有冲突;适用于多读少写的情况下
select之后 在update的时候检查是否和刚才select同一个版本;是的话,则中间没有其他事务操作过,可以执行。反之需要重新读,重新update
悲观锁
默认认为就有问题,有冲突;在查询的时候就给加上一个锁,执行完在解锁
其中有两种实现:
* 共享锁(读锁):加了读锁之后的数据,其他事务也可以在上面加读锁,但是不能加写锁;也就是大家可以一起读一读,但是修改不行;select for update 这种不行,因为要加写锁;del insert update 也不行,因为默认这种操作都是加写锁;
* 排它锁(写锁):加了写锁之后,其他什么锁都加不上了;但是select还是可以查的,因为普通select是不用加锁;select for update 这种就不行,因为这种查询要加写锁