在限定时间后从MySql表中删除

时间:2012-01-10 00:16:05

标签: php mysql sql-delete

我有一个存储了一些帖子的内容,我想在一段有限的时间后删除这些帖子,比如1小时或者其他什么。

有一个网站需要您注册,在您注册之前,您需要通过点击从网站发送的链接验证您的电子邮件。该链接存储在此临时表中。

所以我希望帖子(包含链接)在有限的时间后从那里删除。

$createCommentsTable = "CREATE TABLE comments(
id INT NOT NULL AUTO_INCREMENT,
inlagg_id INT,
namn VARCHAR(30),
kommentar VARCHAR(200),
date VARCHAR(40),
PRIMARY KEY (id)
)";

4 个答案:

答案 0 :(得分:0)

您有多个选项,最简单的方法是添加一个清除旧记录的插入触发器。

delimiter |

CREATE TRIGGER comments_bi BEFORE INSERT ON comments

FOR EACH ROW BEGIN
    DELETE FROM comments WHERE `date` < DATE_SUB( CURRENT_TIMESTAMP, '-1 hour' );
END;

|

delimiter ;

但最好的选择是将这种瞬态数据存储在缓存驱动程序中(如memcache

答案 1 :(得分:0)

根本不需要使用临时表。

您也可以在验证链接中发送所有必填字段,并使用一些哈希密封。

$secret = "35onoi2=-7#%g03kl";
$email = urlencode($_POST['email']);
$hash = MD5($_POST['email'].$secret);
$link = "http://example.com/register.php?email=$email&hash=$hash";

就是这样 无需存储任何内容,因此也可以设置任何事件

答案 2 :(得分:0)

旧帖但我认为需要另一种答案。

当我需要删除临时数据(文件,数据库条目等)时,我通常会创建一个CRON作业。这种解决方案仅适用于您的webhost允许并支持CRON作业的情况。在这种情况下,每个临时记录也应该添加一个时间戳,用于确定是否应该删除该条目。

有关CRON的详细信息,请参阅:CRON

答案 3 :(得分:-1)

查看http://dev.mysql.com/doc/refman/5.1/en/create-event.html。您可以尝试发出类似

的声明
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
   DELETE FROM comments WHERE id = [comment id];