我正在尝试找到针对MariaDB竞争条件的解决方案。 在某些情况下,多个进程几乎在同一时间执行(具有相同的时间戳,该时间戳来自字段中的某些单元),并且它们需要每行读取同一行(但只有第一个行需要执行操作)
我当时想锁定该行(仅锁定该行,而不锁定整个表),因此第一个进程将读取该行并检查最新更新的时间戳,执行所需的任务,一旦解锁其他进程将能够读取它,并且如果它具有相同的时间戳,只需忽略它即可。
这会影响性能,但仅在少数情况下会发生这种情况。
我一直在尝试在MariaDB中执行此操作,但是我找不到如何...启动事务并执行FOR UPDATE似乎会锁定整个表,因为同时我无法提取其他行。
阅读MariaDB文档,我看到了
在SELECT语句中指定LOCK IN SHARE MODE时,MariaDB将等待,直到所有修改了行的事务都提交为止。然后,获取写锁定。所有事务都可以读取行,但是如果要修改行,则必须等到事务提交后。
所以基本上,我想做的事在MariaDB中无法完成?
有什么想法吗?
谢谢