SQLite触发器始终激发



如果不存在,我会在单字段表中插入一个项;为此,我有一个简单的触发器:

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

但它不起作用,我不知道为什么。感谢

我猜表Producers也有Producer以外的其他列
如果是,则此语句将抛出错误:

INSERT INTO Producers values(NEW.Producer);

您应该在语句中提到将接收值NEW.Producer:的列

INSERT INTO Producers(Producer) values(NEW.Producer);

即使您确实进行了此更改,触发器也不会达到您的预期,因为如果表中已经存在值,则没有任何内容可以中止新行的插入

但你不需要这个触发器
您所要做的就是为列Producer定义一个UNIQUE constraint,就完成了。

我找到了工作触发器:

CREATE TRIGGER Insert_Producer
BEFORE INSERT
ON Producers
BEGIN
SELECT
CASE 
WHEN NEW.Producer IN (SELECT Producer FROM Producers) THEN
RAISE(IGNORE)
END;
END;

我认为它不是最好的,但桌子很少。

最新更新