对于iPad应用程序,我创建了一个Web服务,当用户启动应用程序时,该服务会在我的团队表中创建一个新的表行。 PHP生成一个唯一的ID并填充其他一些字段。
此外,我在插入的mySQL中的teams表上创建了一个触发器,其中根据特定日期,项目和组的已插入行自动生成teamnumber。
不幸的是,有时我在向表中插入新行时似乎有时间问题。如果两个应用程序在同一秒内创建一个团队(毫秒?),mySQL触发器的结果将是两个应用程序的相同团队编号。因此,不是拥有团队编号1和2,而是两个应用都拥有团队编号1。
我的团队表看起来像这样:
TeamID | pProject | group | teamnumber | languagecode | created_at
mySQL的触发器:
CREATE TRIGGER after_team_insert BEFORE INSERT ON teams
FOR EACH ROW
BEGIN
SELECT COUNT( * ) INTO @counter
FROM teams
WHERE DATE( created_at ) = DATE( NOW( ) )
AND teams.group = NEW.group
AND teams.pProject = NEW.pProject;
SET NEW.teamnumber = CAST(@counter AS UNSIGNED) + 1;
END;
我认为我的问题与将行插入数据库的并行线程有关,因此当触发器工作时会得到错误的计数。
有没有人有这个问题的解决方案,还是我必须在PHP中使用某种队列来防止这种团队数量加倍?
提前致谢, 卡斯滕。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果出于任何原因,您无法锁定表格,可以尝试以不同方式处理问题:
不是那么干净,有点棘手,但是如果你不介意在第4队之后插入第3队,那就应该做好。