既然没有事务 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,及数据的一致性处理

数据库:Mysql中“select ... for update”排他锁分析

数据库:Mysql中“select ... for update”排他锁分析

转载MySQL事务以及SELECT ... FOR UPDATE的使用