MySQL中NOW()、SYSDATE()和CURRENT_DATE()的区别

hyrbngr7  于 2023-04-19  发布在  Mysql
关注(0)|答案(7)|浏览(290)

MySQL中的NOW()SYSDATE()CURRENT_DATE()有什么区别,可以在真实的场景中使用。
我尝试NOW()SYSDATE()Current_Date()当我插入数据到一个表和列数据类型是TIMESTAMP都给出了相同的日期和时间。

hfyxw5xn

hfyxw5xn1#

CURRENT_DATE():只会给予你日期。
NOW():给予语句、过程等开始的日期时间。
SYSDATE():给予你当前的日期时间。
使用以下查询查看在now()1sysdate()1之间等待5秒后的秒数(向右滚动):

select now(),sysdate(),current_date(),sleep(5),now(),sysdate();

-- will give
-- now()                 sysdate()              current_date()          sleep(5)    now()1                sysdate()1
-- 6/10/2014 2:50:04 AM  6/10/2014 2:50:04 AM   6/10/2014 12:00:00 AM   0           6/10/2014 2:50:**04** AM  6/10/2014 2:50:**09** AM
qeeaahzv

qeeaahzv2#

NOW()返回一个常量时间,指示语句开始执行的时间。(在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)这与SYSDATE()的行为不同,SYSDATE()返回其执行的确切时间。

mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(2) | NOW()               |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:36 |        0 | 2006-04-12 13:47:36 |
+---------------------+----------+---------------------+

mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(2) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:44 |        0 | 2006-04-12 13:47:46 |
+---------------------+----------+---------------------+
p1tboqfb

p1tboqfb3#

Current_date返回客户端的时间戳,而sysdate返回服务器的时间戳。如果服务器和客户端都在同一台机器上,那么,两个命令的结果是相同的。但是如果你的服务器在美国,而你的客户端在中国,那么,这两个函数返回完全不同的结果。
我不知道现在的情况(),对不起:-)

bjg7j2ky

bjg7j2ky4#

sysdate()now()之间的一个主要区别最近让我感到困惑。这是它们执行的时间点和频率的差异。sysdate()在同一条语句中 * 每次 * 都被求值--即在它应用的每一行中。但是now()只被求值 * 一次,即在查询执行的开始 *。
当只有几行时,这种差异并不明显。但是当有数百万行时,这种差异就非常明显了。例如,在RHEL 7中,sysdate()显然会进行代价高昂的系统调用,因此当有数百万行时,使用sysdate()需要一个多小时,而在完全相同的语句中使用now()只需要几秒钟!
这是在精度问题之上的,因为sysdate()将返回不同的值,例如,在时间t和时间t+50米利斯之间。
关于curdate(),我也想知道它与now()sysdate()有什么不同。MySQL参考说,关于何时执行以及执行多少次,curdate()的行为与now()相似。
参考:MySQL 5.7 Reference - Date and Time Functions--所有上述内容都在本页中进行了描述。但是,它们分散在页面上,因此您必须阅读概述部分以及每个函数的参考。

vybvopom

vybvopom5#

CURRENT_DATE()是许多其他类似函数的同义词,所有这些函数都只提供日期
official MySQL website页。

jm2pwxwz

jm2pwxwz6#

CURRENT_DATE是静态的,并且与日期索引一起使用效果更好。
NOW()* 似乎 * 是动态的,并没有从索引中受益。(我很想在这里听到关于MySQL内部的更多细节的评论!)
下面是一个使用NOW()的真实示例:

explain SELECT DISTINCT e.manager_id, m.manager_name FROM events e JOIN manager m ON m.manager_id = e.manager_id
    WHERE m.manager_name != '' AND e.event_when > NOW() - INTERVAL 1 YEAR;
+---------+----------+------------------------------+
| rows    | filtered | Extra                        |
+---------+----------+------------------------------+
| 1333648 |    29.06 | Using where; Using temporary |
|       1 |    90.59 | Using where                  |
+---------+----------+------------------------------+

您可以看到使用CURRENT_DATE(或CURRENT_TIMESTAMP)大大减少了行数:

explain SELECT DISTINCT e.manager_id, m.manager_name FROM events e JOIN manager m ON m.manager_id = e.manager_id
   WHERE m.manager_name != '' AND e.event_when > CURRENT_DATE - INTERVAL 1 YEAR;
+--------+----------+----------------------------------------+
| rows   | filtered | Extra                                  |
+--------+----------+----------------------------------------+
| 361470 |   100.00 | Using index condition; Using temporary |
|      1 |    90.59 | Using where                            |
+--------+----------+----------------------------------------+
r6l8ljro

r6l8ljro7#

NOW()返回一个常量时间,表示语句开始执行的时间,而SYSDATE()返回它执行的时间...或者换句话说,NOW()显示查询执行时间,SYSDATE()显示自执行时间。

相关问题