Mysql中什么是悲观锁和乐观锁?

悲观锁:

  悲观锁获取数据时对数据行了锁定,其他事务要想获取锁,必须等原事务结束。

mysql使用:在数据修改语句末尾添加for update即可

select * from 数据表 where 条件 for update;

**Django使用: objects数据管理器后面添加.select_for_update()方法 **

entries = Entry.objects.select_for_update().filter(查询条件)

所有匹配的行将被锁定,直到事务结束,这样可以防止数据被其他事务修改。

一般情况下如果其他事务规定了相关行,那么本查询将被阻塞,锁被释放,如果这不是你想要的行为,请使用select_for_update(nowait=True)。这将使查询不阻塞。如果其他事务持有冲突的锁,那么查询将引起DatabaseError异常。


乐观锁:

查询时不锁数据,提交更改时进行判断查询时的数据是否等于现在的数据,如果是就操作,否则不操作。

update df_goods_sku set stock=0, sales=1 where id=17 and stock=1;

 
冲突比较少的时候,使用乐观锁。
冲突比较多的时候,使用悲观锁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值