【问题标题】:SQLite trigger always fireSQLite 触发器总是触发
【发布时间】:2020-12-05 10:38:08
【问题描述】:
如果项目不存在,我会在 uni 字段表中插入项目;为此,我有一个简单的触发器:
CREATE TRIGGER Insert_Producer
BEFORE INSERT
ON Producers
WHEN NEW.Producer NOT IN (SELECT Producer FROM Producers)
BEGIN
INSERT INTO Producers values(NEW.Producer);
END
但它不起作用,我无法找到原因。
谢谢
【问题讨论】:
标签:
sqlite
triggers
insert
【解决方案1】:
我猜Producers 表还有除Producer 之外的其他列。
如果是这样,那么这个语句会抛出一个错误:
INSERT INTO Producers values(NEW.Producer);
您应该在语句中提及将接收值NEW.Producer 的列:
INSERT INTO Producers(Producer) values(NEW.Producer);
即使您确实进行了此更改,触发器也不会按照您的预期执行,因为如果值已存在于表中,则没有任何内容可以中止插入新行。
但您不需要此触发器。
您所要做的就是为Producer 列定义一个UNIQUE constraint,然后就完成了。
【解决方案2】:
我找到了工作触发器:
CREATE TRIGGER Insert_Producer
BEFORE INSERT
ON Producers
BEGIN
SELECT
CASE
WHEN NEW.Producer IN (SELECT Producer FROM Producers) THEN
RAISE(IGNORE)
END;
END;
虽然不是最好的,但桌子很少。