MySQL悲观锁与乐观锁
悲观锁与乐观锁的区别:
1. 悲观锁是数据库的层次去加锁的
2. 乐观锁就是表字段里面加上版本号或者使用字段条件
3. 悲观锁效率比效率低,最好还是用一些缓存数据库去解决这个问题。但是涉及到钱的我觉得还是悲观锁好。乐观锁的效率要比悲观锁高。
悲观锁使用介绍:
假定MySQL有客户端A与客户端B同时开启事务
在A里面进行查询数据:SELECT * FROM tb WHERE id = 1 for update;
由于B端还没有提交事务,A端则会在执行这条SQL语句时锁住(卡住不动),B端结束了事务,A端才会继续执行SQL。
乐观锁使用介绍:
假定我的表里面有个库存字段stock 值是100、版本号字段version 值是0。当前记录id等于1的值是初始化的值。
那么我在更新他的时候可以这样写:UPDATE tb SET stock = stock - 1, version = version + 1 WHERE id = 1 AND stock = 100 AND version = 0;