Mysql 更新集不存在';我不能据此工作
我正在制作一个在MySQL中运行的计时器函数,它在启动计时器时用MySQL当前的时间戳设置开始时间 当他们停止计时器时,我在SQL中计算时间差,并将其添加到time中,然后再次将start_time设置为0Mysql 更新集不存在';我不能据此工作,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'
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。我唯一真正关心的是时间。