检查是否在最后x秒内添加了mySQL记录

检查是否在最后x秒内添加了mySQL记录,mysql,Mysql,我有一个mySQL数据库和一个表,其中创建了项目的新记录。创建的每个项目都有一个“项目名称”和一个事件创建日期(类型为DATETIME) 可以使用相同的名称创建两个项目,但如果它们是由同一用户连续快速创建的,则可以安全地认为这是用户的错误(单击两次,在传递事件变量时刷新浏览器等) 如何编写SQL语句来检查是否已经存在同名记录,该记录是在最近10秒内添加的?到目前为止,我有以下内容,虽然我不知道如何检查最后10秒 select * from projects where user = 'johns

我有一个mySQL数据库和一个表,其中创建了项目的新记录。创建的每个项目都有一个“项目名称”和一个事件创建日期(类型为DATETIME)

可以使用相同的名称创建两个项目,但如果它们是由同一用户连续快速创建的,则可以安全地认为这是用户的错误(单击两次,在传递事件变量时刷新浏览器等)

如何编写SQL语句来检查是否已经存在同名记录,该记录是在最近10秒内添加的?到目前为止,我有以下内容,虽然我不知道如何检查最后10秒

select * from projects where user = 'johnsmith' AND projectname = 'test' AND active='y' AND DATE(projectcreatedon) = CURRENT_DATE AND DATEPART() < ....?
select*从项目中,其中user='johnsmith'和projectname='test',active='y'和DATE(projectcreatedon)=CURRENT\u DATE和DATEPART()。。。。?
替换和日期(projectcreatedon)=当前日期和日期部分()。。。。?与:

AND projectcreatedon > (now() - INTERVAL 10 SECOND)

你试图以错误的方式解决问题。为什么不从源头上解决问题呢?使用户无法连续创建这两个项目

如果您的应用程序允许用户通过刷新多次提交表单,请考虑在GET/POST变量已被处理之后使用重定向。


此外,单击一次submit按钮后,使用简单的客户端技巧禁用它。你可以通过一个

来实现这一点,我建议不要在MySQL中保留这样的检查,因为这可能不是了解错误的完美方法,因为用户可能会在10秒后单击提交或刷新页面。相反,在前端代码中进行检查,以禁用两次单击submit按钮,或者将用户重定向到不传递变量的页面

但如果您不想这样做,那么这可能是您的问题:

SELECT *
FROM `projects`
WHERE `user` = 'johnsmith'
AND `projectname` = 'test' 
AND `active`='y' 
AND TIMESTAMPDIFF(SECOND, projectcreatedon, now()) > 10;

我认为正确的方法是在事务中插入,检查名称是否已经存在,这样您就可以避免问题,只是为了清楚起见,使用相同的名称添加一个项目是可以的,但如果它是在最后10秒钟左右,则不可以。如果用户真的想添加同名的项目,我会让他们再等几秒钟。