我在表中有一个列,我想在行更改或第一次插入时自动更新。我已将其设置为使用UNIX_TIMESTAMP
函数,因为我发现这是最简单的,因为我想获得至少一周的所有行,或者有更简单/更好的方法。
我可以使用datetime
或timestamp
类型,但我不确定如何检索7天或更早的行。
我知道我只是将DEFAULT
设置设置为相应的功能,例如UNIX_TIMESTAMP
以自动更新!?
答案 0 :(得分:2)
最简单的方法是让您的专栏像这样:
CREATE TABLE foo(
whatever_id int auto_increment,
myTS timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(whatever_id)
);
这样一旦你在行中的某些东西,myTS会自动更新当前日期。 CURRENT_TIMESTAMP的默认值是可选的。唯一的缺点是MySQL只允许表中的一列使DEFAULT
或ON UPDATE
拥有CURRENT_TIMESTAMP
。但是存在变通方法并且现在导致了太多。询问您是否需要知道。
然后,如果您想拥有7天或更早的行,请执行
SELECT
*
FROM foo
WHERE
DATEDIFF(CURDATE(), myTS) >= 7
/*or
DATEDIFF(CURDATE(), myTS) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
*/
详细了解DATEDIFF
函数here。
或者另一种方式是
SELECT
*
FROM foo
WHERE
DATE_ADD(myTS, INTERVAL 1 WEEK) <= CURDATE()
您可以在与上述相同的链接下阅读有关DATE_ADD
功能的更多信息。
当然也可以手工选择日期:
SELECT
*
FROM foo
WHERE
myTS < '2012-07-02'
但请注意,timestamp
列包含日期和时间值。所以当你在上面写一些类似查询的内容时,它会隐式'2012-07-02 00:00:00'
。因此,如果你想要<= 2012-07-02 (the whole day)
这样的东西,你必须写<= '2012-07-02 23:59:59'
。希望补充一点,以防这会导致混乱。