更新集不起作用

时间:2011-08-28 19:49:07

标签: mysql sql

我正在制作一个在MySQL中运行的计时器功能,它在启动计时器时使用MySQL CURRENT_TIMESTAMP设置start_time。

当他们停止计时器时,我在SQL中计算时差,然后将其添加到时间,并再次将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'

当我停止计时器时,而不是在查询中使用start_time,它首先将它设置为0000-00-0000:00,所以我的时间实际上是(time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP('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 ;

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

最好将您的计划更改为:

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 ...'使用CURRENT_TIMESTAMP。

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

NEW.start_time = CURRENT_TIMESTAMP;

答案 1 :(得分:0)

为什么不在两个单独的更新中进行?

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语句使用它的当前值。你是否正在改变启动计时器的值?尝试在更新前添加一个选择,以查看start_time的值是什么。

我刚试过这个..

更新时间 set start_time ='2011-08-28 17:02:47' 其中id = 1;

更新time    SET time =(时间+(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(start_time))),start_time ='0000-00-00 00:00:00'  WHERE id ='1';

和id = 1得到正确的数字。检查以确保start_time和time具有良好的值。