如果不存在,我会在单字段表中插入一个项;为此,我有一个简单的触发器:
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;
我认为它不是最好的,但桌子很少。