Php 比赛条件

Php 比赛条件,php,database,mariadb,race-condition,Php,Database,Mariadb,Race Condition,我正试图找到一个解决MariaDB种族问题的办法。 在某些情况下,多个进程几乎同时执行(使用来自字段中某些单元的相同时间戳),并且每个进程都需要读取相同的行(但只有第一个进程需要执行操作) 我想锁定行(只有行,锁定整个表不是选项),因此第一个进程将读取它并检查最新更新的时间戳,执行所需的任务,一旦解锁,其他进程将能够读取它,如果它具有相同的时间戳,则忽略它 它将影响性能,但仅限于发生这种情况的少数情况 我一直想在MariaDB这样做,但我找不到方法。。。启动事务并执行更新似乎会锁定整个表,因为我

我正试图找到一个解决MariaDB种族问题的办法。 在某些情况下,多个进程几乎同时执行(使用来自字段中某些单元的相同时间戳),并且每个进程都需要读取相同的行(但只有第一个进程需要执行操作)

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

它将影响性能,但仅限于发生这种情况的少数情况

我一直想在MariaDB这样做,但我找不到方法。。。启动事务并执行更新似乎会锁定整个表,因为我无法同时获取其他行

在阅读MariaDB文档时,我看到了这一点

在SELECT语句中指定LOCK IN SHARE模式时,MariaDB将等待提交所有修改行的事务。然后,获取写锁。所有事务都可以读取这些行,但如果它们想修改这些行,则必须等待您的事务提交

所以基本上,我想做的事不能在MariaDB完成

有什么想法吗


谢谢,

如果您是基于时间戳检查行,您不能在操作/更新中使用WHERE条件,以便仅当时间戳不同时才会发生?请提供
SHOW CREATE TABLE
和您初步构建的查询。我认为
FOR update
()子句可能更好地满足您的需要。