Mysql 从某个时段抓取行时最容易使用的时间戳类型?

Mysql 从某个时段抓取行时最容易使用的时间戳类型?,mysql,datetime,unix-timestamp,Mysql,Datetime,Unix Timestamp,我在表中有一列,每当行发生更改或第一次插入时,我都希望自动更新该列。我已经将它设置为使用UNIX\u TIMESTAMP函数,因为我发现当我想要获取至少一周前的所有行或者有更简单/更好的方法时,这是最简单的 我可以使用datetime或timestamp类型,但我不确定如何检索7天或更早的行 我知道我只是将DEFAULT设置设置为相应的功能,例如UNIX\u TIMESTAMP以自动更新它 最简单的方法是让你的专栏像这样: CREATE TABLE foo( whatever_id int au

我在表中有一列,每当行发生更改或第一次插入时,我都希望自动更新该列。我已经将它设置为使用
UNIX\u TIMESTAMP
函数,因为我发现当我想要获取至少一周前的所有行或者有更简单/更好的方法时,这是最简单的

我可以使用
datetime
timestamp
类型,但我不确定如何检索7天或更早的行


我知道我只是将
DEFAULT
设置设置为相应的功能,例如
UNIX\u TIMESTAMP
以自动更新它

最简单的方法是让你的专栏像这样:

CREATE TABLE foo(
whatever_id int auto_increment,
myTS timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(whatever_id)
);
这样,每当您在行中输入内容时,myTS将自动更新为当前日期。当前_时间戳的默认值是可选的。唯一的缺点是MySQL只允许表中的一列具有
默认值
或更新时的
具有
当前时间戳
。但存在一些变通办法,而这一点现在已经走得太远了。问问你是否需要知道

然后,当您想要有7天或更久的行时,您可以这样做

SELECT
*
FROM foo
WHERE
DATEDIFF(CURDATE(), myTS) >= 7
/*or
DATEDIFF(CURDATE(), myTS) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
*/
阅读有关
DATEDIFF
函数的更多信息

或者另一种方式是

SELECT
*
FROM foo
WHERE
DATE_ADD(myTS, INTERVAL 1 WEEK) <= CURDATE()
但是请注意,
timestamp
列由日期和时间值组成。因此,当您在上面编写类似查询的内容时,它隐式地是
'2012-07-02 00:00:00'
。因此,如果您想要像

SELECT
*
FROM foo
WHERE
myTS < '2012-07-02'