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;

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

DELETE FROM password_recovery WHERE rowid = NEW.rowid;

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

唯一正确的实现方法是将恢复请求和恢复作为两个独立的事务。

尝试使用这样的引用或者这个

也许他们都能在你的情况下帮助你。你的代码对我来说似乎也有一些问题,调查一下。您必须为该触发器创建一个触发器,类似于我提供的链接。