Mysql

在同一個查詢 INSERT 中,兩個 VALUES 是 NOW() 可以返回不同的時間嗎?

  • March 24, 2021

我遇到了一個類似的查詢

INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())

具有列定義

| Created   | datetime |
| Updated   | datetime |

在這種情況下,MySQL 會將 NOW() 值設置為目前時間並將相同的值返回給兩個呼叫,還是該查詢會執行(不太可能的)風險,即 Created 和 Updated 有兩個稍微不同的時間?

注意:我無法更改欄位類型。

NOW()和其他日期時間函式返回的時間是從查詢的開始時間派生的。這裡的THD類用於包含連接的所有資訊。NOW()函式實現獲取該值並將其返回到now_time結構中。

MySQL文件NOW()還指出:

NOW() 返回一個常數時間,指示語句開始執行的時間。…

您將始終NOW()從查詢中的任何位置獲得相同的值。

MariaDB [test]> select now(),sleep(10),now();
+---------------------+-----------+---------------------+
| now()               | sleep(10) | now()               |
+---------------------+-----------+---------------------+
| 2021-03-22 14:17:05 |         0 | 2021-03-22 14:17:05 |
+---------------------+-----------+---------------------+

值得注意的是,這不是每筆交易:

MariaDB [test]> start transaction
   -> ;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]>  select now();
+---------------------+
| now()               |
+---------------------+
| 2021-03-22 14:20:53 |
+---------------------+
1 row in set (0.00 sec)

MariaDB [test]> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.00 sec)

MariaDB [test]> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-03-22 14:21:00 |
+---------------------+
1 row in set (0.00 sec)

引用自:https://dba.stackexchange.com/questions/287454