首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 10.4.3 NOW() 当前日期和时间函数 在MySQL数据库中,`NOW()`函数是一个极其重要且常用的函数,它用于返回当前的日期和时间值。这个函数在多种场景下都非常有用,比如记录数据插入或更新的时间戳、生成报告时的当前时间显示等。`NOW()`函数返回的格式通常是`'YYYY-MM-DD HH:MM:SS'`,即年-月-日 时:分:秒,这符合ISO 8601标准,易于理解和处理。 #### 1. NOW()函数的基本用法 `NOW()`函数不需要任何参数,直接调用即可返回当前的日期和时间。其基本语法如下: ```sql SELECT NOW(); ``` 执行这条SQL语句后,MySQL会返回执行时的确切日期和时间。 #### 2. NOW()函数的应用场景 ##### 2.1 记录数据插入时间 在数据表中,经常需要记录数据的创建时间或更新时间。通过在表设计时加入一个`DATETIME`或`TIMESTAMP`类型的字段,并在插入数据时使用`NOW()`函数自动填充该字段,可以非常方便地实现这一需求。 ```sql CREATE TABLE example ( id INT AUTO_INCREMENT PRIMARY KEY, data VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 插入数据时,created_at字段会自动设置为当前时间 INSERT INTO example (data) VALUES ('Some data'); ``` 注意:在上面的例子中,虽然`NOW()`函数没有直接用于`INSERT`语句中,但`TIMESTAMP`类型的`created_at`字段通过`DEFAULT CURRENT_TIMESTAMP`和`ON UPDATE CURRENT_TIMESTAMP`属性自动使用了当前时间戳,这与`NOW()`函数的效果相同。 ##### 2.2 时间戳比较 `NOW()`函数返回的日期时间值也常用于与表中的其他时间戳字段进行比较,以查询特定时间段内的数据。 ```sql -- 查询最近一天内插入的数据 SELECT * FROM example WHERE created_at > NOW() - INTERVAL 1 DAY; ``` 这个例子展示了如何使用`NOW()`函数结合日期时间运算来查询特定时间段内的数据。 ##### 2.3 报告和日志 在生成报告或记录日志时,`NOW()`函数常被用来记录报告或日志的生成时间,确保数据的时效性和准确性。 ```sql INSERT INTO logs (message, created_at) VALUES ('System startup successful.', NOW()); ``` #### 3. NOW()函数的变种与替代 虽然`NOW()`函数是获取当前日期和时间的直接方式,但在某些特定场景下,你可能需要更灵活的日期时间处理。MySQL提供了几个与`NOW()`相关的函数和表达式,可以作为其变种或替代方案。 ##### 3.1 CURDATE() 和 CURTIME() - `CURDATE()`:仅返回当前日期(不包含时间部分)。 - `CURTIME()`:仅返回当前时间(不包含日期部分)。 这两个函数在处理仅需要日期或时间的场景时非常有用。 ##### 3.2 SYSDATE() `SYSDATE()`函数与`NOW()`类似,也用于返回当前的日期和时间。但是,它们在处理事务时的行为有所不同。在事务中,`NOW()`函数在SQL语句开始执行时获取一次时间值,并在整个事务中保持不变;而`SYSDATE()`函数则会在每次调用时都重新获取当前的日期和时间,即使它在同一个事务中被多次调用。 ```sql START TRANSACTION; SELECT NOW(); -- 第一次调用,获取时间T1 SELECT NOW(); -- 第二次调用,但返回的还是T1 SELECT SYSDATE(); -- 第一次调用,获取时间T2 SELECT SYSDATE(); -- 第二次调用,返回T3(如果T2和T3之间有时间差) COMMIT; ``` #### 4. NOW()函数的性能考虑 在大多数情况下,`NOW()`函数的性能开销是可以忽略不计的。然而,在极端情况下,如高并发环境下的频繁调用,任何额外的函数调用都可能会对性能产生影响。因此,在设计数据库和编写查询时,应尽量避免不必要的函数调用,尤其是在循环或大量数据处理中。 #### 5. 实战演练:使用NOW()函数 假设我们正在设计一个电商网站的用户订单系统,需要记录每个订单的创建时间和最后更新时间。我们可以按照以下步骤设计表和插入数据: ```sql CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 插入订单数据 INSERT INTO orders (user_id, product_id, quantity) VALUES (1, 101, 2); -- 查询订单信息,包括创建和更新时间 SELECT order_id, user_id, product_id, quantity, created_at, updated_at FROM orders; ``` 在这个例子中,虽然我们没有直接在`INSERT`语句中使用`NOW()`函数来设置`created_at`字段的值,但`TIMESTAMP`类型的自动初始化特性(`DEFAULT CURRENT_TIMESTAMP`)已经为我们完成了这项工作。同样,每当订单数据被更新时,`updated_at`字段也会自动更新为当前的日期和时间。 #### 6. 总结 `NOW()`函数是MySQL中用于获取当前日期和时间的强大工具,它简单易用,在多种场景下都发挥着重要作用。通过本文的介绍,你应该已经掌握了`NOW()`函数的基本用法、应用场景、变种与替代方案,以及在使用时需要注意的性能考虑。希望这些内容能帮助你在数据库设计和数据管理中更加得心应手。
上一篇:
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
下一篇:
10.4.4 DATEDIFF(d1,d2)间隔天数函数
该分类下的相关小册推荐:
MySQL 实战 45 讲
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(五)
MySQL从入门到精通(一)
MySQL从入门到精通(二)
MySQL8.0入门与实践
MySQL必会核心问题
细说MySQL(零基础到高级应用)
MySQL从入门到精通(四)
MySQL必知必会核心内容