首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL insert multiple ()随机工作

问SQL insert multiple ()随机工作
EN

Stack Overflow用户
提问于 2015-01-13 14:37:40
回答 2查看 333关注 0票数 0

我有大约40行以下声明

代码语言:javascript
复制
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表中的内容是

​

​

多个万-00- 00:00:00散落在各处,这不应该发生。

我尝试了以下对我无效的方法:

  • 一次插入一行,
  • 使用CURRENT_TIMESTAMP而不是NOW(),
  • 将insert语句更改为一个长语句,而不是多个insert语句,以及
  • 在InnoDB和MyISAM引擎之间切换,以及
  • 使用紧凑的和冗余的,固定的和动态的行格式。

我可以给出插入时间戳的空间,但实际上,服务器每天将收到成千上万个这样的“插入”或“更新”请求,输入是NOW()或CURRENT_TIMESTAMP。因此,手工解决这个问题的方法不会使它完全消失。

任何有可能解决这个问题的帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:41:52

你在用日期时间值做数学,这从来不是个好主意。timevalue + integer将给出一个整数结果:

代码语言:javascript
复制
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错误日期。

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

代码语言:javascript
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2015-01-13 14:42:28

mysql Now()函数实际上获取执行查询的当前日期和时间,因此您将得到不同的值,但它将是递增的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27924619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档