SQL插入多个NOW()随机工作

时间:2015-01-13 14:37:41

标签: mysql

我有大约40行以下陈述

INSERT INTO `maindb`.`table` (`a_id`, `b_id`, `c_id`, `time_1`, `time_2`, `time_3`, `time_4`, `p`) VALUES (NULL, '1',3, NOW()+3907, NOW()+4192, NOW()+4291, NOW()+7945, '1');

在我执行了它们之后,实际存储在MySQL表中的是

SQL Result Sample

有多个函数00:00:00分散在各处,不应该发生。

我尝试了以下哪些对我不起作用:

  • 一次插入1行,
  • 使用CURRENT_TIMESTAMP代替NOW(),
  • 将insert语句更改为一个long语句而不是多个单个insert语句,并且
  • 在InnoDB和MyISAM引擎之间切换,
  • 使用COMPACT vs REDUNDANT和FIXED vs DYNAMIC行格式。

我可以插入时间戳的插入,但实际上,服务器将接收成千上万的这样的"插入"或者"更新"请求输入为NOW()或CURRENT_TIMESTAMP的一天。因此,解决这个问题的手动方式不会让它完全消失。

非常感谢任何有助于解决此问题的帮助。

2 个答案:

答案 0 :(得分:5)

您正在使用日期时间值进行数学运算,这绝不是一个好主意。 timevalue + integer将为您提供整数结果:

mysql> select now(), now()+4291;
+---------------------+-----------------------+
| now()               | now()+4291            |
+---------------------+-----------------------+
| 2015-01-13 08:40:18 | 20150113088309.000000 |
+---------------------+-----------------------+
1 row in set (0.00 sec)

注意添加如何将您的日期/时间字符串转换为“数字化”数字。基本上它是通过从字符串中删除-:来进行直接字符串 - >整数转换。那些整数会被填入您的日期/时间字段,并且因为它们日期/时间值,您会得到0000-00-00错误日期

如果你想用日期和时间做“数学”,你必须使用适当的工具:

mysql> select now(), now() + interval 4291 second;
+---------------------+------------------------------+
| now()               | now() + interval 4291 second |
+---------------------+------------------------------+
| 2015-01-13 08:41:21 | 2015-01-13 09:52:52          |
+---------------------+------------------------------+
1 row in set (0.00 sec)

答案 1 :(得分:0)

mysql Now()函数实际上获取了执行查询的当前日期和时间,因此您必须获得不同的值,但它将采用递增顺序