Удалить строку с триггером обновления - PullRequest
0 голосов
/ 14 марта 2011

У меня есть таблица с двумя столбцами: имя (текст) и количество (целое число)

Новое имя вставляется в таблицу, если оно не существует (с числом = 1), в противном случае счетчик увеличивается. У меня есть аналогичная функция, которая вместо этого уменьшает счетчик. Чего я хотел бы добиться, так это того, что когда этот счетчик достигает 0, он удаляет строку. Я думал об использовании триггера для этого:

CREATE TRIGGER fooTrigger
AFTER UPDATE OF count ON foo
BEGIN
  DELETE FROM foo WHERE count=0;
END;

Проблема в том, что по какой-то причине триггер, кажется, удаляет каждую строку.

Любой совет, в чем может быть проблема? Я подозреваю, что проблема может быть связана с использованием триггера на самой таблице, но я, конечно, не знаю ..

Заранее спасибо.

1 Ответ

1 голос
/ 14 марта 2011

Возможным решением может быть ограничение удаления строкой, которая обновляется.Я предполагаю, что имя столбца является уникальным (или первичный ключ).Следующий триггер только проверяет столбец подсчета в строке, которая была обновлена:

create trigger fooTrigger
after update of count on foo
for each row when new.count = 0 begin
    delete from foo where name = new.name;
end

РЕДАКТИРОВАТЬ

Если ваш столбец имени не уникален, вы можете ограничитьудаление до фактического идентификатора строки (этот синтаксис ограничен sqlit). Это означает, что если у вас есть две строки с именем «hello world» и двумя различными значениями, удаление будет влиять только на строку, которая сначала достигает 0!Но я все же предполагаю, что имя столбца является уникальным, для хорошей практики проектирования:)

create trigger fooTrigger
after update of count on foo
for each row when new.count = 0 begin
    delete from foo where rowid = new.rowid;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...