在多线程环境中选择更新

时间:2019-04-04 00:26:21

标签: mysql

I',在多线程环境中编写MySQL查询,以便可以在任何给定数量的线程上执行此查询。我的数据库是使用InnoDB引擎的MySQL 8。

让我们说我有一个包含10个数字(1,2,3,4,5,6,7,8,9,10)的数据库表

我有一个SELECT ... FOR UPDATE查询,该查询从数据库中的表中限制为2行。 FOR UPDATE将锁定行以确保隔离。如果我有5个同时启动的线程,则线程1将抓取条目1和2,线程2看到线程1获得了条目1和2,因此它将抓取3和4.。依此类推。

这种行为会发生吗?

1 个答案:

答案 0 :(得分:1)

否,锁应该对查询计划没有影响。查询将尝试选择符合WHEREORDER BY条件的行。如果它们被另一个线程锁定,它将阻塞。

此外,锁定将取决于WHEREORDER BY子句是否使用索引列。如果检查未索引的列,则必须扫描整个表以查找或排序行,这将有效地锁定整个表。如果将这些子句限制为索引列,则它应该只能对这些索引设置锁定。

有关更多信息,请参见MySQL论坛中的use of LIMIT, FOR UPDATE in SELECT statement