MySQL NOW() 用法与实例
MySQL 中的 NOW() 函数用于获取当前的日期和时间,适用于各种时间数据处理场景。
MySQL 中的 NOW()
函数是我们获取当前日期和时间的瑞士军刀,它能够精确地返回查询执行时的系统时间。无论是记录数据创建时间、计算时间间隔,还是生成时间戳,这个函数都是开发者的首选工具。想象一下需要记录用户注册时间、跟踪订单处理时间,或者简单地在日志中添加时间标记——NOW()
都能完美胜任这些任务。
函数基本语法
使用 NOW()
函数就像查看墙上的时钟一样简单直接:
NOW([fsp])
其中可选的 fsp
参数用于指定小数秒的精度(0-6),让我们可以获取从秒级到微秒级不同精度的时间戳。
获取当前时间的基本方法
让我们从最简单的用法开始:
SELECT NOW();
-- 返回结果类似: 2023-08-20 15:30:45
SELECT NOW() + 0;
-- 返回数字格式: 20230820153045
第二个例子展示了如何将日期时间值转换为数字格式,这在某些特殊场景下可能有用。
不同精度的时间获取
MySQL 5.6.4 及以上版本支持微秒级精度:
SELECT NOW(3);
-- 返回结果类似: 2023-08-20 15:30:45.123
SELECT NOW(6);
-- 返回结果类似: 2023-08-20 15:30:45.123456
这种高精度时间戳在需要严格时序记录的系统中特别有价值。
在实际应用中的使用
假设我们有一个用户注册表:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT NOW(),
updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);
这里我们巧妙地在表定义中使用 NOW()
作为默认值,自动记录创建和更新时间。
与其他时间函数的对比
了解 NOW()
与相似函数的区别很重要:
SELECT NOW(), SYSDATE(), CURRENT_TIMESTAMP(), UTC_TIMESTAMP();
NOW()
返回语句开始执行时的时间SYSDATE()
返回函数调用时的精确时间CURRENT_TIMESTAMP()
是NOW()
的同义词UTC_TIMESTAMP()
返回 UTC 时间而非本地时间
在时间计算中的应用
NOW()
经常用于各种时间计算:
-- 计算3天后的日期
SELECT NOW() + INTERVAL 3 DAY;
-- 计算2小时前的时间
SELECT NOW() - INTERVAL 2 HOUR;
-- 计算两个时间点之间的天数差
SELECT DATEDIFF(NOW(), '2023-01-01') AS days_since_new_year;
在条件筛选中的应用
NOW()
在 WHERE 子句中非常实用:
-- 找出今天创建的订单
SELECT * FROM orders
WHERE DATE(created_at) = DATE(NOW());
-- 找出过去一小时内更新的用户
SELECT * FROM users
WHERE updated_at >= NOW() - INTERVAL 1 HOUR;
格式化时间输出
虽然 NOW()
返回标准格式,但我们可以美化输出:
SELECT DATE_FORMAT(NOW(), '%W, %M %e, %Y at %l:%i %p') AS formatted_time;
-- 返回结果类似: Sunday, August 20, 2023 at 3:30 PM
在事务中的特殊行为
了解 NOW()
在事务中的行为很重要:
START TRANSACTION;
SELECT NOW();
-- 等待几秒...
SELECT NOW();
COMMIT;
-- 两个查询返回相同的时间值
NOW()
在事务中会返回事务开始时间,而 SYSDATE()
则会返回实际调用时间。
性能考虑
虽然 NOW()
非常高效,但在某些场景需要注意:
- 大数据量查询中多次调用
NOW()
可能影响性能 - 考虑使用默认值而非触发器来设置时间戳
- 高并发系统中微秒级精度可能需要权衡
总结
MySQL 的 NOW()
函数是我们处理时间相关需求的得力助手。通过本文,我们掌握了如何获取当前时间、如何控制时间精度、如何在表设计中巧妙使用这个函数,以及各种实际应用场景。从简单的记录创建时间到复杂的时间计算,NOW()
都能提供简单而强大的解决方案。理解它与相似函数的区别,以及在不同上下文中的行为特点,可以帮助我们写出更可靠、更高效的 SQL 查询。无论是开发小型应用还是企业级系统,NOW()
都是每个 MySQL 开发者工具箱中不可或缺的工具。