【问题标题】:How to implement row level locking如何实现行级锁定
【发布时间】:2020-09-05 08:35:45
【问题描述】:

这不适用于行级锁定 我只是想知道我是否可以选择这样的行

select * from table where folder like %344443%** 

然后用

更新行
update table set folder = '{"bin":"44456","venv":4366}' where id = 'i-instanceid'

【问题讨论】:

  • 您使用的是哪个数据库?

标签: mysql concurrency innodb database-concurrency


【解决方案1】:

你不能。

问题是UPDATE 必须扫描整个表才能找到您需要更改的行。这样做会锁定整个表。

不要将您想要搜索的内容隐藏在 JSON 字符串中。将它们作为自己的索引列。这应该可以让您锁定一行,并更快地运行更新。

或者查看索引部分 JSON 列。这种情况仍在发展。你用的是什么版本的 MySQL?

另外,为什么要先选择id,再更新呢?你不能简单地进行更新吗?如果您实际上在“交易”中做其他事情,请说出来。您可能需要SELECT。那时,它需要是SELECT ... FOR UPDATE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多