引言
这里写一些MySQL使用中碰到的小问题和注意点。
FROM_UNIXTIME()
一般数据表中会用时间戳来表示时间,这时候就可以用FROM_UNIXTIME()
转换时间戳为时间。
格式:FROM_UNIXTIME(unix_timestamp, format)
用法,SELECT FROM_UNIXTIME(599462400) AS Unix;
返回 1988-12-29 22:20:00
看个例子,获取当日的日志信息:
SELECT
ip,
COUNT(*) as num
FROM
yp_admin_log
WHERE
FROM_UNIXTIME(created_at, "%Y-%m-%d") = date_format(NOW(), "%Y-%m-%d")
GROUP BY
ip;
在MySql从5.7版本开始默认开启only_full_group_by
规则,规则核心原则如下,没有遵循原则的sql会被认为是不合法的sql。
所以FROM_UNIXTIME()
使用时要注意遵守规范:
SELECT
FROM_UNIXTIME(created_at, "%Y-%m-%d") as date,
COUNT(*) as num
FROM
yp_admin_log
GROUP BY
FROM_UNIXTIME(created_at, "%Y-%m-%d")
ORDER BY FROM_UNIXTIME(created_at, "%Y-%m-%d") desc limit 30;
SQL_CALC_FOUND_ROWS
看一个SQL语句:
SELECT SQL_CALC_FOUND_ROWS * FROM `user` WHERE `status` IN ( '3' ) ORDER BY id ASC;
SQL_CALC_FOUND_ROWS 是什么?
SQL_CALC_FOUND_ROWS是MySQL中的一个特殊修饰符,用于执行在应用LIMIT分页限制的同时获取符合条件的总行数, 而不仅仅是返回查询结果的部分数据。
当使用LIMIT条件来限制查询结果的数量时,数据库只会返回满足条件的前N行数据,而不会告诉你总共有多少行符合查询条件。 这对于实现分页功能时可能会有问题,因为你无法知道总共有多少行数据,从而无法生成正确的分页导航。
而使用SQL_CALC_FOUND_ROWS,可以在执行带LIMIT的查询时,附带统计一下如果不加LIMIT的话将会输出多少条结果。 在得到数据后,通过FOUND_ROWS()可以得到不带LIMIT的结果数。