既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是啥?
Posted
技术标签:
【中文标题】既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是啥?【英文标题】:Since SELECT FOR UPDATE is meaningless without a transaction and transactions use locks by itself, what is the usecase of SELECT FOR UPDATE?既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是什么? 【发布时间】:2020-03-16 17:01:45 【问题描述】:从这里: https://***.com/a/27868682/10894456
SELECT ... FOR UPDATE 将通过写入锁定记录(独占) 锁定直到事务完成(提交或回滚)。
选择一条记录并确保在您更新之前它不会被修改 它,你可以开始一个事务,使用 SELECT 选择记录... FOR UPDATE,做一些快速处理,更新记录,然后提交 (或回滚)事务。
这里 https://***.com/a/5411366/10894456
注意,事务之外的 FOR UPDATE 是没有意义的
那么既然没有事务的 INSERT FOR UPDATE 是没有意义的并且事务本身使用锁,那么 INSERT FOR UPDATE 的用例是什么? 我唯一的猜测: SELECT ... FOR UPDATE 仅在事务具有低隔离级别(如 read_uncommit)时才有意义,但我不确定,请帮助我
【问题讨论】:
【参考方案1】:在这里找到:https://***.com/a/16963718/10894456
SERIALIZABLE 和使用 SELECT FOR UPDATE 的主要区别 是使用 SERIALIZABLE 时,一切都始终被锁定。与哪里一样 SELECT FOR UPDATE 您可以选择锁定的内容和时间。
所以 SELECT FOR UPDATE 让我们变得挑剔
【讨论】:
以上是关于既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是啥?的主要内容,如果未能解决你的问题,请参考以下文章
mysql事务,select for update,及数据的一致性处理
mysql事务,select for update,及数据的一致性处理
数据库:Mysql中“select ... for update”排他锁分析