由多个用户同时更新同一记录


Making simultaneous UPDATES by multi-users to the same record

使用PHP和MySQL,我想使用父母和多子女关系来跟踪注册情况。如果有多个用户尝试使用同一父代码注册,则会出现问题。父级将只为1个用户而不是2个用户进行贷记。据我所知,解决方案是锁定记录。或者使用服务器时间和记录时间戳来确定上次更新。

#THIS IS NOT PRODUCTION CODE, BUT JUST INTENDED TO DEFINE MY PROCESS
#PLEASE ADVISE AND MAKE ADJUSTMENTS AS YOU SEE FIT
$sqlget = SELCT * record of PARENT and WHERE id is of PARENT
$ts -> timestamp;
$st -> servertime;
$af -> aff_number;

现在我想检查父级的时间戳的最后一次记录更新,如果更新发生在不到10秒前,我想重新运行我的$sqlget

如何将$ts转换为INT,将$st转换为INT,以便运行IF语句如果我的条件失败,则循环$sqlget。

if($ts <= $st by 10 seconds) { wait 10 seconds and rerun sqlget } 
else { get current $af (INT) and +1; UPDATE record; close connection; 
META-refresh to next page; }

那么,这个过程看起来是有效的吗?这是否能确保即使有一个以上的孩子同时注册,每个孩子的注册都会得到父母的适当奖励?我不希望多次同时注册,但它们可能会在某个场合发生,我必须确保家长得到适当的学分。

我不理解您的SQL结构。

如果您将"信用"与具有相同父ID的新孩子的出现相关联,那么任何数量的用户都可以同时加入。

刚刚运行:

INSERT INTO affiliations ( id_p, ... ) VALUES ( id_of_parent, whatever_data );

你就完了。父母和孩子是否坐在不同的桌子上是无关紧要的。重要的是不能有从父级到子级的引用,即,您唯一的引用是子行中父级的id。这样就不会在父级上出现并发问题。

当你需要知道一位父母有多少孩子时,只需计算一下:

从附属中选择计数(*),其中id_p=id_of_pparent;

我怀疑您现在正在父行中存储一个计数器。如果是这样的话,不要:它看起来更简单,但并发问题使它不值得付出努力。