триггер записи, предотвращающий удаление некоторых строк с помощью sqlite - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть две таблицы («Трек» и «Альбом»), и я хочу предотвратить удаление некоторых треков, для которых название их альбома «Lost» с этим триггером, но код применим ко всем идентификаторам треков, как мне кажется. Я не могу удалить любую дорожку (идентификатор дорожки является первичным ключом таблицы дорожек, а идентификатор альбома - это внешний ключ таблицы альбомов в дорожке)

Что не так в моем коде? Пожалуйста, помогите!

Спасибо

CREATE TRIGGER Undeletelosttracks AFTER DELETE ON Track 
BEGIN
SELECT CASE
WHEN OLD.TrackID = (SELECT Track.TrackID FROM
Track JOIN Album USING(AlbumID)
WHERE Album.Title LIKE 'Lost%'
)
THEN
 RAISE(ABORT,'Can not delete')
END;
END;

1 Ответ

0 голосов
/ 18 апреля 2020

Я удивлен, что вы говорите, что ваш триггер не позволяет удалять из вашей таблицы. Из того, что я пробовал, это не мешает удалению. Используйте этот триггер:

CREATE TRIGGER Undeletelosttracks BEFORE DELETE ON Track
FOR EACH ROW
WHEN EXISTS (
  SELECT 1 
  FROM Album a
  WHERE a.AlbumID = OLD.AlbumID AND a.Title LIKE 'Lost%'
)
BEGIN      
  SELECT RAISE(ABORT,'Can not delete'); 
END; 
...