#ios #sqlite
#iOS #sqlite
Вопрос:
У меня есть таблица:
Товары
itemID int autoincrement
itemName text
Доступность элемента
itemID integer REFERENCES Items (itemID)
availability integer DEFAULT 0
Мне нужен триггер для выполнения:
Когда пользователь добавит запись в таблицу Items, триггер должен автоматически добавить запись в таблицу itemAvailability.
itemAvailability.ItemId=Items.ItemId
На данный момент я дошел до этого момента и застрял:
CREATE TRIGGER updateItemsAvailabilityTbl AFTER INSERT ON items
BEGIN
INSERT INTO itemAvailability (itemID)
VALUES (items.itemID)
END
ну, у меня это не работает. пожалуйста, помогите.
Ответ №1:
В вашем операторе CREATE TRIGGER допущены две ошибки. 1. Как написано в документации
действия триггера могут обращаться к элементам вставляемой, удаляемой или обновляемой строки с использованием ссылок вида «NEW.column-name» и «OLD.column-name», где column-name — это имя столбца из таблицы, с которой связан триггер. СТАРЫЕ и НОВЫЕ ссылки могут использоваться в триггерах только для событий, для которых они релевантны, следующим образом:
ВСТАВКА НОВЫХ ссылок допустима
ОБНОВЛЕНИЕ НОВЫЕ и СТАРЫЕ ссылки действительны
УДАЛЕНИЕ допустимых СТАРЫХ ссылок
Поэтому вам следует написать new.itemID
вместо items.itemID
. 2. Оператор INSERT INTO должен заканчиваться точкой с запятой. Попробуйте это:
CREATE TRIGGER updateItemsAvailabilityTbl AFTER INSERT ON items
BEGIN
INSERT INTO itemAvailability (itemID)
VALUES (new.itemID);
END