Mysql 更新集不存在';我不能据此工作

Mysql 更新集不存在';我不能据此工作,mysql,sql,Mysql,Sql,我正在制作一个在MySQL中运行的计时器函数,它在启动计时器时用MySQL当前的时间戳设置开始时间 当他们停止计时器时,我在SQL中计算时间差,并将其添加到time中,然后再次将start_time设置为0 UPDATE `time` SET `time` = time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(start_time)), `start_time` = '0000-00-00 00:00:00'

我正在制作一个在MySQL中运行的计时器函数,它在启动计时器时用MySQL当前的时间戳设置开始时间

当他们停止计时器时,我在SQL中计算时间差,并将其添加到time中,然后再次将start_time设置为0

UPDATE `time`
   SET `time` = time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(start_time)),
       `start_time` = '0000-00-00 00:00:00' 
 WHERE `id` =  '1'
当我停止计时器时,它没有在查询中使用开始时间,而是首先将其设置为0000-00-00 00:00:00,因此我的时间实际上是
(time+(UNIX\u时间戳(当前时间戳)-UNIX\u时间戳('0000-00-00 00:00:00'))
,这不是正确的值

CREATE TABLE IF NOT EXISTS `time` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `time` double NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `start_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

如何解决此问题?

最好将您的方案更改为:

CREATE TABLE IF NOT EXISTS `time` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `time` double NOT NULL,
  `date` timestamp NOT NULL DEFAULT,
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
))

我的意思是“0000…”的安装使用当前的时间戳

另一种方法是使用触发器执行此插入操作。它看起来像:

NEW.start_time = CURRENT_TIMESTAMP;

最好将您的计划更改为:

CREATE TABLE IF NOT EXISTS `time` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `time` double NOT NULL,
  `date` timestamp NOT NULL DEFAULT,
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
))

我的意思是“0000…”的安装使用当前的时间戳

另一种方法是使用触发器执行此插入操作。它看起来像:

NEW.start_time = CURRENT_TIMESTAMP;

为什么不分两次更新呢

UPDATE `time`
   SET `time` = (time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(start_time)))
 WHERE `id` =  '1';

UPDATE `time`
`start_time` = '0000-00-00 00:00:00' 
WHERE `id` =  '1'
看看你的模式。默认值设置为该值,update语句使用它的当前值。您是否在手动更改启动计时器的值?尝试在更新之前添加一个select以查看开始时间的值

我刚试过这个

更新时间 设置开始时间='2011-08-2817:02:47' 其中id=1

更新时间 设置
时间
=(时间+(UNIX时间戳(当前时间戳)-UNIX时间戳(开始时间)),
开始时间
='0000-00-00:00:00' 其中
id
='1'


id=1及时得到了正确的数字。检查以确保开始时间和时间具有良好的值。

为什么不在两个单独的更新中执行此操作

UPDATE `time`
   SET `time` = (time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(start_time)))
 WHERE `id` =  '1';

UPDATE `time`
`start_time` = '0000-00-00 00:00:00' 
WHERE `id` =  '1'
看看你的模式。默认值设置为该值,update语句使用它的当前值。您是否在手动更改启动计时器的值?尝试在更新之前添加一个select以查看开始时间的值

我刚试过这个

更新时间 设置开始时间='2011-08-2817:02:47' 其中id=1

更新时间 设置
时间
=(时间+(UNIX时间戳(当前时间戳)-UNIX时间戳(开始时间)),
开始时间
='0000-00-00:00:00' 其中
id
='1'


id=1及时得到了正确的数字。检查以确保开始时间和时间具有良好的值。

我使用开始时间=“0000-00-00 00 00:00:00”检查计时器是否正在运行。。。这是一种不好的做法吗?一旦计时器开始使用当前时间戳,我就会更改开始时间。将两个字段默认设置为
CURRENT\u TIMETSAMP
(如果可能的话)有什么意义?请检查我关于触发器的注释。不,不可能两次使用当前时间戳。我删除了一个用法。我使用start_time=“0000-00-00 00:00:00”检查计时器是否正在运行。。。这是一种不好的做法吗?一旦计时器开始使用当前时间戳,我就会更改开始时间。将两个字段默认设置为
CURRENT\u TIMETSAMP
(如果可能的话)有什么意义?请检查我关于触发器的注释。不,不可能两次使用当前时间戳。我删除了一个用法。相同的结果。它仍然将开始时间检查为0000-00-00:00:00,结果相同。它仍然将开始时间检查为0000-00-00 00:00:00为什么将开始时间设置为零?为什么要破坏可能有用的信息?@tpae;正如Jonatahn所暗示的,您应该将
start\u time
设置为非零。您是否尝试在更新中将其设置为
CURRENT\u TIMESTAMP
?在计时器启动时,它将启动时间设置为CURRENT\u TIMESTAMP。在计时器停止时,它将开始时间设置为0。我真正关心的唯一数字是时间。你为什么把开始时间设为零?为什么要破坏可能有用的信息?@tpae;正如Jonatahn所暗示的,您应该将
start\u time
设置为非零。您是否尝试在更新中将其设置为
CURRENT\u TIMESTAMP
?在计时器启动时,它将启动时间设置为CURRENT\u TIMESTAMP。在计时器停止时,它将开始时间设置为0。我唯一真正关心的是时间。