SQLite触发器删除激活触发器的记录

时间:2016-10-01 20:30:04

标签: sql sqlite

我想创建一个触发器,以便在创建记录2分钟后删除它。这将用于“恢复密码”方案,因此这些2分钟将是某人使用验证代码恢复其密码的时间窗口。我正在研究SQLite。情况如下:

CREATE TABLE IF NOT EXISTS password_recovery(
    email VARCHAR(50) NOT NULL UNIQUE,
    confirmation_id INTEGER(5) PRIMARY KEY,
    FOREIGN KEY (email) REFERENCES users (email)
        ON DELETE NO ACTION ON UPDATE NO ACTION,
);

CREATE TRIGGER IF NOT EXISTS password_recovery_deletion_timer AFTER INSERT ON password_recovery
    BEGIN
       DO SLEEP(120);
       // i want to delete here but how do I pass which record triggered the trigger?                
    END;

2 个答案:

答案 0 :(得分:0)

您可以使用表格的(主要)键:

DELETE FROM password_recovery WHERE rowid = NEW.rowid;

但是,触发器作为触发它们的语句的一部分执行。因此原始的INSERT语句将等待两分钟,并且登录将无法从数据库中读取此行,因为插入事务尚未完成。

实现此目的的唯一正确方法是使恢复请求和恢复成为两个单独的事务。

答案 1 :(得分:-1)

尝试使用this之类的引用 或this one.

在你的情况下,我们都可以帮助你。你给我编码似乎也有一些问题,看看。您必须为该触发器创建一个触发器,类似于我提供的链接中所示。