我在找一些关于mysql的帮助,很简单的问题,但真的伤了我的大脑一段时间。
我有一个名为“logs”的表,它有“date”的东西,也就是int(11)的timestamp,所以它使用timestamp actual。
我要做一个脚本,每分钟执行一个sql命令,检查所有行,如果“date”有超过/等于6个小时,我太累了,没有任何帮助。
有些命令我用过,但不起作用。
DELETE FROM logs WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR));
DELETE FROM logs WHERE date < NOW() - INTERVAL 6 HOUR;
帮不上忙,所以,我在这里问你能不能帮我,谢谢。
3条答案
按热度按时间c3frrgcw1#
日期“thing”称为列。列具有特定的数据类型。问题表明列是数据类型
INT(11)
. 在该列中存储的是unix风格的32位整数,即自1970-01-01 utc以来的秒数。如果这都是真的,那么第一个查询表单是合适的。右侧的表达式(小于比较的)返回整数秒数。
作为演示,请考虑以下表达式:
或者,原作的写法
返回等效结果。
可以计算第二个查询,但是从datetime到numeric的自动转换将返回一个整数值,如
20180608153555
(即yyyymmddhhmmss),而不是从纪元开始的秒数。考虑一个演示,在数值上下文中计算datetime dataytpe:
如果我们使用该表达式,将其与int(11)列进行比较,并删除int(11)列小于该值的所有行,它将删除表中该列中具有非null值的每一行。
7y4bm7vi2#
你可以这样做:
kgsdhlau3#
日期列的类型必须是timestamp而不是int,以便能够正确地相互比较时间戳,或者可以编写: