我想创建一个触发器,以便在创建记录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语句将等待两分钟,并且登录将无法从数据库中读取这一行,因为插入事务尚未完成。
唯一正确的实现方法是将恢复请求和恢复作为两个独立的事务。
尝试使用这样的引用或者这个
也许他们都能在你的情况下帮助你。你的代码对我来说似乎也有一些问题,调查一下。您必须为该触发器创建一个触发器,类似于我提供的链接。