#sqlite #triggers #insert
#sqlite #триггеры #вставить
Вопрос:
Я бы вставил в таблицу полей 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
Но это не работает, и я не могу понять, почему.
Спасибо
Ответ №1:
Я предполагаю, что в таблице Producers
есть и другие столбцы, кроме Producer
too.
Если это так, то это утверждение выдаст ошибку:
INSERT INTO Producers values(NEW.Producer);
Вы должны указать в инструкции столбец, который получит значение NEW.Producer
:
INSERT INTO Producers(Producer) values(NEW.Producer);
Даже если вы внесете это изменение, триггер не будет делать то, что вы ожидаете, потому что там нет ничего, что могло бы прервать вставку новой строки, если значение уже существует в таблице.
Но вам не нужен этот триггер.
Все, что вам нужно сделать, это определить a UNIQUE constraint
для столбца Producer
, и все готово.
Ответ №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;
Может быть, это не самое лучшее, но таблица очень маленькая.