悲观锁与乐观锁

来源:互联网 发布:美妆po主 知乎 编辑:程序博客网 时间:2024/06/03 22:40

悲观锁和乐观锁都是为了防止同时修改数据导致的一系列问题,但是悲观锁是依赖于数据库的锁机制,对每次请求上锁,可能导致并发性降低的问题。而乐观锁利用一些技巧实现了锁的效果,并迅速失败,避免了上锁时间过长带来的并发问题。

 悲观锁

select column ... from table tablename where [condition] for update;

该sql语句对查询的结果上锁,其他语句如果访问查询结果则会一直阻塞直到超时。

上锁如果通过索引查询则是行锁,否则为表锁。

乐观锁

通过一些附加数据来实现上锁。
比如增加一个version字段
实现过程:
写数据前先获取数据和version并保存,
然后update数据 update tablename set datacolumn = value, version=version+1 where id=1,version=#{version}
因为一次修改数据的时候加入了version条件,并且同时修改version,所以该操作只能被执行一次,执行一次后version改变,则无法给另一个语句执行。
0 0