在 MySQL 中,執行 UPDATE … datetime = NOW(); 語句時,所有更新的行都會具有相同的日期/時間嗎?


now() 函式返回一個常量時間,表示任何語句開始執行的時間。從 MySQL 5.0.13 開始,sysdate() 函式返回執行語句時的完全相同的日期時間。

假設您在觸發器或儲存過程中使用 now() 更新 datetime,則 now() 方法將返回觸發器和儲存過程開始執行的時間。

以下是使用 now() 更新的演示。讓我們先建立一個表。建立表的查詢如下:

mysql> create table NowDemo
-> (
-> DueDateTime datetime
-> );
Query OK, 0 rows affected (0.51 sec)

使用 insert 命令在表中插入記錄。查詢如下:

mysql> insert into NowDemo values('2018-12-19');
Query OK, 1 row affected (0.15 sec)

mysql> insert into NowDemo values('2018-11-10');
Query OK, 1 row affected (0.20 sec)

mysql> insert into NowDemo values('2017-11-21');
Query OK, 1 row affected (0.09 sec)

使用 select 語句檢查表中的所有記錄。查詢如下:

mysql> select *from NowDemo;

輸出

+---------------------+
| DueDateTime         |
+---------------------+
| 2018-12-19 00:00:00 |
| 2018-11-10 00:00:00 |
| 2017-11-21 00:00:00 |
+---------------------+
3 rows in set (0.00 sec)

以下是如何使用 now() 更新 datetime 列的查詢,它會更新所有值。

案例 1 - 使用 now()

查詢如下:

mysql> update NowDemo set DueDateTime = now();
Query OK, 3 rows affected (0.12 sec)
Rows matched: 3 Changed: 3 Warnings: 0

使用 select 命令檢查更新後的值。查詢如下:

mysql> select *from NowDemo;

以下是輸出,顯示所有行現在都具有相同的日期時間:

+---------------------+
| DueDateTime         |
+---------------------+
| 2018-12-20 16:10:00 |
| 2018-12-20 16:10:00 |
| 2018-12-20 16:10:00 |
+---------------------+
3 rows in set (0.00 sec)

案例 2 - 使用 sysdate()

查詢如下:

mysql> update NowDemo set DueDateTime = sysdate();
Query OK, 3 rows affected (0.43 sec)
Rows matched: 3 Changed: 3 Warnings: 0

使用 select 語句檢查表中的更新後的值。查詢如下:

mysql> select *from NowDemo;

以下是輸出,顯示所有行現在都具有相同的日期時間:

+---------------------+
| DueDateTime         |
+---------------------+
| 2018-12-20 16:10:35 |
| 2018-12-20 16:10:35 |
| 2018-12-20 16:10:35 |
+---------------------+
3 rows in set (0.00 sec)

更新於: 2020-06-25

2K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.