簡體   English   中英

SQL插入多個NOW()隨機工作

[英]SQL insert multiple NOW() working randomly

我有大約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結果樣本

有多個零星散布的00:00:00不應該發生的情況。

我嘗試了以下對我不起作用的方法:

  • 一次插入1行,
  • 使用CURRENT_TIMESTAMP代替NOW(),
  • 將插入語句更改為一個長語句,而不是多個單個插入語句,然后
  • 在InnoDB和MyISAM引擎之間切換,以及
  • 使用COMPACT vs REDUNDANT和FIXED vs DYNAMIC行格式。

我可以隔開時間戳的插入,但是實際上,服務器每天將收到成千上萬個這樣的“插入”或“更新”請求,如果輸入不是NOW()或CURRENT_TIMESTAMP,則服務器會收到數千個。 因此,解決該問題的手動方法不會使其完全消失。

任何可能解決此問題的幫助將不勝感激。

您正在使用日期時間值進行數學運算,這從來都不是一個好主意。 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)

請注意加法如何將您的日期/時間字符串轉換為“數字化”數字。 基本上,它是通過從字符串中刪除-:來進行直接的string-> integer轉換。 這些整數然后得到塞到你的日期/時間字段,因為他們沒有日期/時間值,你得到了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)

mysql Now()函數實際上獲取執行查詢的當前日期和時間,因此您肯定會獲得不同的值,但是它將以遞增順序進行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM