比赛条件MariaDB

时间:2020-03-12 13:47:45

标签: php database mariadb race-condition

我正在尝试找到针对MariaDB竞争条件的解决方案。 在某些情况下,多个进程几乎在同一时间执行(具有相同的时间戳,该时间戳来自字段中的某些单元),并且它们需要每行读取同一行(但只有第一个行需要执行操作)

我当时想锁定该行(仅锁定该行,而不锁定整个表),因此第一个进程将读取该行并检查最新更新的时间戳,执行所需的任务,一旦解锁其他进程将能够读取它,并且如果它具有相同的时间戳,只需忽略它即可。

这会影响性能,但仅在少数情况下会发生这种情况。

我一直在尝试在MariaDB中执行此操作,但是我找不到如何...启动事务并执行FOR UPDATE似乎会锁定整个表,因为同时我无法提取其他行。

阅读MariaDB文档,我看到了

在SELECT语句中指定LOCK IN SHARE MODE时,MariaDB将等待,直到所有修改了行的事务都提交为止。然后,获取写锁定。所有事务都可以读取行,但是如果要修改行,则必须等到事务提交后。

所以基本上,我想做的事在MariaDB中无法完成?

有什么想法吗?

谢谢

0 个答案:

没有答案