美文网首页
Mysql ShareLock 与 UpdateForLock

Mysql ShareLock 与 UpdateForLock

作者: kimcastle | 来源:发表于2022-02-18 15:05 被阅读0次

场景

拼团功能,当 A 客户开团之后(两人团),如果 B 和 C 同时支付,如何规避两人同时将拼团人数增加。

Laravel 中 sharedLock 与 lockForUpdate 的区别

sharedLock 对应的是 LOCK IN SHARE MODE

lockForUpdate 对应的是 FOR UPDATE

sharedLock 与 lockForUpdate 相同的地方是,都能避免同一行数据被其他 transaction 进行 update。

不同的地方是:

sharedLock 不会阻止其他 transaction 读取同一行

lockForUpdate 会阻止其他 transaction 读取同一行 (需要特别注意的是,普通的非锁定读取读取依然可以读取到该行,只有 sharedLock 和 lockForUpdate 的读取会被阻止。)

即 sharedLock locks only for write, lockForUpdate also prevents them from being selected

这样做是有意义的,例如,两个 transaction 要更新同一个计数器,如果不使用 lockForUpdate, 会导致两个 transaction 同时读到同一个初始值,然后在应用层逻辑中增加计数之后,提交到数据库中,后者的操作会覆盖掉前者的操作。

下面进行实操测试:

情况一:

A:  lockForUpdate

B: lockForUpdate 或 ShareLock 都需要等待 A 提交事务。

未提交事务前 B 等待 A commit 后,才进行查询 B 采用 shareLock 查询也是一样效果 B 等待太久可能会超时

情况二:

A: 采用 shareLock;

B:采用 LockForUpdate;

B 也必须等待 A 提交事务后,才进行查询;

B 也必须等待 A 提交事务后,才进行查询

情况三:

A:采用  shareLock;

B:采用  shareLock;

B 不需要等待 A 提交,即可查出结果

B 不需要等待 A 提交,即可查出结果

情况三:

A: lockForUpdate;

B: 进行更新操作,必须等待  A commit;

进行更新操作,必须等待  A commit;

情况四:

A: shareLock;

B: 进行更新操作,必须等待  A commit;

A 未 commit 前  A commit 后

结论:

更新操作:无论进行 shareLock 还是 LockForUpdate  其他 transaction 必须等待事务的提交才可以进行下去。

查询操作:LockForUpdate 可以屏蔽其他 transaction 对记录的查询;shareLock 可以共享查询。

相关文章

  • Mysql ShareLock 与 UpdateForLock

    场景 拼团功能,当 A 客户开团之后(两人团),如果 B 和 C 同时支付,如何规避两人同时将拼团人数增加。 La...

  • 1.MySQL的架构与历史

    MySQL逻辑架构 并发控制 读写锁sharelock共享锁,exclusivelock排他锁 锁粒度table ...

  • chap01 初涉MySQL

    MySQL概述 MySQL的安装与配置 网上相关资源很多 启动与停止MySQL服务 启动MySQL服务 net s...

  • 共享锁(S锁)和排它锁(X锁)

    共享锁 ShareLock 共享锁又称为读锁。即读取操作时创建的锁。其他用户可以并发的读取数据。若事务T对数据A加...

  • MySQL 命令

    MySQL登录与退出登录Mysql:“输入mysql -u帐号 -p密码 这是登陆mysql退出:mysql > ...

  • mysqli

    一、mysql与mysqli的概念相关: mysql与mysqli都是php方面的函数集,与mysql数据库关联不...

  • 初探 MySQL

    启动与停止MySQL服务 在cmd界面中启动与停止mysql服务: net start mysql net sto...

  • 收藏-MySQL

    # MySQL的并发控制与加锁分析# MySQL的四种事务隔离级别# mysql共享锁与排他锁

  • MySQL书目

    MySQL数据库索引设计与优化 MySQL技术内幕 MySQL排错指南 高性能MySQL MySQL DBA修炼之道

  • 99 MySQL性能实战优化

    mysql 性能优化 一 MySQL架构与执行流程原理 二 MySQL 索引底层实现原理 三 MYSQL事务...

网友评论

      本文标题:Mysql ShareLock 与 UpdateForLock

      本文链接:https://www.haomeiwen.com/subject/hrlylrtx.html