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

时间:2012-09-06 14:35:25

标签: php mysql

使用PHP和MySQL我想使用PARENT和多子关系来跟踪注册。 如果超过1个用户尝试使用相同的父代码进行注册,则会出现问题。父母只会记入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; }

这个过程看起来有用吗?即使一个以上的孩子同时签名,这是否会确保每个孩子注册的父母都能得到适当的记入? 我不希望多并发注册,但它们可能会发生,我必须确保PARENT正确记入。

1 个答案:

答案 0 :(得分:0)

我不了解你的SQL结构。

如果您将“信用”与具有相同父ID的新子项的外观相关联,则任意数量的用户可能会同时加入。

跑步:

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

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

当您需要知道给定父母有多少孩子时,只需计算它们:

SELECT COUNT(*)FROM affiliations WHERE id_p = id_of_parent;

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