Php 带触发器的mySQL插入的计时问题
对于iPad应用程序,我创建了一个web服务,当用户启动应用程序时,它会在我的团队表中创建一个新的表行。PHP生成一个唯一的ID,并填充其他一些字段 此外,我在mySQL中的teams表上创建了一个触发器,在该触发器中,根据已插入的特定日期、项目和组的行自动生成一个teamnumber 不幸的是,有时在表中插入新行时,我似乎有时间问题。如果两个应用程序在同一秒内创建一个团队?mySQL触发器的结果将是两个应用程序的相同组号。因此,这两款应用都没有teamnumber 1和teamnumber 2 我的团队表如下所示:Php 带触发器的mySQL插入的计时问题,php,mysql,triggers,Php,Mysql,Triggers,对于iPad应用程序,我创建了一个web服务,当用户启动应用程序时,它会在我的团队表中创建一个新的表行。PHP生成一个唯一的ID,并填充其他一些字段 此外,我在mySQL中的teams表上创建了一个触发器,在该触发器中,根据已插入的特定日期、项目和组的行自动生成一个teamnumber 不幸的是,有时在表中插入新行时,我似乎有时间问题。如果两个应用程序在同一秒内创建一个团队?mySQL触发器的结果将是两个应用程序的相同组号。因此,这两款应用都没有teamnumber 1和teamnumber 2
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中使用某种队列来防止团队数量加倍
提前感谢,,
卡斯滕。我想你可以用锁桌!
如果出于任何原因,您无法锁定表,您可以尝试以不同的方式处理此问题: 在列组/p项目/teamnumber上添加唯一约束。 处理代码中的任何约束错误,检查组号是否是问题所在,然后尝试重新评估它。 确保您的团队编号已设置。如果没有,请再试一次。
没有那么干净,有点棘手,但如果您不介意在第4组之后插入第3组,它应该可以工作。谢谢Jason,现在工作得很好:-不知道我怎么会忘记锁表可耻我不客气!你能投票支持这个答案吗?谢谢你!谢谢,锁定现在运行得很好,但是您的方法也很有趣!