在 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.