Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带触发器的mySQL插入的计时问题_Php_Mysql_Triggers - Fatal编程技术网

Php 带触发器的mySQL插入的计时问题

Php 带触发器的mySQL插入的计时问题,php,mysql,triggers,Php,Mysql,Triggers,对于iPad应用程序,我创建了一个web服务,当用户启动应用程序时,它会在我的团队表中创建一个新的表行。PHP生成一个唯一的ID,并填充其他一些字段 此外,我在mySQL中的teams表上创建了一个触发器,在该触发器中,根据已插入的特定日期、项目和组的行自动生成一个teamnumber 不幸的是,有时在表中插入新行时,我似乎有时间问题。如果两个应用程序在同一秒内创建一个团队?mySQL触发器的结果将是两个应用程序的相同组号。因此,这两款应用都没有teamnumber 1和teamnumber 2

对于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,现在工作得很好:-不知道我怎么会忘记锁表可耻我不客气!你能投票支持这个答案吗?谢谢你!谢谢,锁定现在运行得很好,但是您的方法也很有趣!