在MySQL中,NOW() 函数用于获取当前的日期和时间,格式为 YYYY-MM-DD HH:MM:SS。这个函数常用于插入或更新记录时自动记录当前时间,比如创建时间、更新时间等场景。
基本语法
NOW() 函数不接受任何参数,直接调用即可:
NOW()
返回值是当前的日期和时间,精确到秒(在某些版本中可支持微秒,取决于系统和配置)。
常见使用场景
1. 插入当前时间到数据表
假设有一张用户注册表,需要记录用户的注册时间:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
created_at DATETIME DEFAULT NULL
);
插入数据时使用 NOW() 自动填充当前时间:
INSERT INTO users (username, created_at) VALUES ('john', NOW());这样,created_at 字段就会保存执行插入操作时的日期和时间。
2. 作为字段默认值
更便捷的方式是在建表时将 NOW() 设为默认值:
CREATE TABLE logs (id INT AUTO_INCREMENT PRIMARY KEY,
action VARCHAR(100),
log_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
注意:MySQL 中推荐使用 CURRENT_TIMESTAMP 作为默认值,它与 NOW() 效果相同,且是标准写法。从 MySQL 5.6.5 开始,DEFAULT NOW() 也支持,但建议使用 CURRENT_TIMESTAMP 更稳妥。
3. 在 UPDATE 操作中更新时间
更新某条记录时,同时更新其修改时间:
UPDATE users SET username = 'jane', updated_at = NOW() WHERE id = 1;前提是表中有 updated_at 字段。
与时区相关说明
NOW() 返回的是当前会话所设置的时区时间。可以通过以下命令查看当前时区:
SELECT @@session.time_zone;如果需要统一使用 UTC 时间,可设置会话时区:
SET time_zone = '+00:00';与其他时间函数对比
NOW():返回当前日期和时间(datetime 类型) CURDATE():只返回当前日期,如 2025-04-05 CURTIME():只返回当前时间,如 14:23:10 SYSDATE():与 NOW() 类似,但在包含延迟执行的语句中行为不同基本上就这些。NOW() 是日常开发中最常用的时间函数之一,适合记录操作发生的准确时间点。只要注意字段类型设为 DATETIME 或 TIMESTAMP,并合理设置默认值或手动调用,就能高效使用。
