1. MySQL NOW() 函数概述
MySQL NOW() 函数用于在数据库中轻松获取当前的日期和时间。通过使用 NOW() 函数,您可以在插入数据时获取时间戳,或检索对日志记录有用的时间信息。虽然简单,但它是一个非常强大的工具,使用广泛。
NOW() 函数的基本语法
NOW() 函数的语法非常简单。您可以使用以下查询获取当前的日期和时间。
SELECT NOW();
执行结果以 YYYY-MM-DD HH:MM:SS 的格式返回。例如,如果日期和时间是 2024 年 10 月 24 日 16:30,结果如下所示。
2024-10-24 16:30:00
NOW() 函数基于数据库时区返回当前的日期和时间。这使得整个系统的时间管理保持一致。
NOW() 函数的常见使用场景
NOW() 函数在以下情况下特别有用。
- 日志记录:自动记录数据被修改或插入的时间。
- 时间戳:用于记录用户操作的时间。
- 基于时间的过滤:提取在特定时间段内发生的数据。
2. NOW() 函数的基本使用示例
下面来看几个使用 NOW() 函数检索当前日期和时间的基本示例。
SELECT NOW();
该查询返回当前的日期和时间。除了以字符串形式获取外,您还可以以数值格式获取。使用以下查询,当前的日期和时间将以数值格式(YYYYMMDDHHMMSS)返回。
SELECT NOW() + 0;
例如,结果可能返回为 “20241024163000”,在数值处理时非常方便。
指定小数秒精度
NOW() 函数允许您指定小数秒的精度。可以使用如下参数设置精度。
SELECT NOW(3);
该查询返回带有毫秒精度(小数点后三位)的结果。例如,可能返回 “2024-10-24 16:30:00.123”。此特性在需要秒级精度的系统中极为有用。
3. SYSDATE() 与 NOW() 的区别
有一个与 NOW() 类似的函数叫 SYSDATE(),但它们的行为略有不同。
- NOW():在查询执行开始时获取时间,并在整个语句期间保持相同的值。即使事务运行时间很长,也返回相同的结果。
- SYSDATE():在查询的每一步都获取当前时间。换句话说,即使在长时间运行的事务中,也返回实时的当前时间。
例如,在长时间运行的批处理过程中,SYSDATE() 可能提供更准确的实时结果。但在事务一致性重要的情况下,通常推荐使用 NOW()。
示例:查询内部的差异展示
以下查询演示了 SYSDATE() 与 NOW() 在行为上的差异。
SELECT NOW(), SYSDATE();
结果可能如下所示。
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
查询执行时的时间差体现在 SYSDATE() 中,而 NOW() 保持查询开始时的时间。虽然差异细微,但根据使用场景选择合适的函数非常重要。 
4. NOW() 函数的实际应用
NOW() 函数在特定场景下非常有用。例如,如果您想在数据插入时自动记录日期和时间,可以使用如下所示的 NOW() 函数。
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
.当记录被插入时,这会自动在 created_at 列中记录当前时间。此功能在日志记录和事件跟踪方面尤为有价值。
此外,如果您想检索过去七天内创建的数据,可以使用 NOW() 函数,如下所示。
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
此查询检索从当前日期和时间起过去七天内创建的所有记录。NOW() 函数在基于时间的数据提取方面极为高效。
5. 使用 NOW() 函数时的重要注意事项
在使用 NOW() 函数时有几个重要点需要考虑。尤其是,它可能影响事务的一致性,因此需根据具体情境适当使用。
- 事务内行为 : NOW() 函数在事务内部返回一致的结果,即使在长时间运行的过程中也返回相同的时间戳。这对于保持数据一致性很重要。然而,如果需要实时时间戳,使用 SYSDATE() 更为合适。
此外,由于 NOW() 函数依赖于时区设置,它可能会根据系统配置返回不同的结果。在全球化应用中,必须在设计时考虑时区因素。


