编写触发器以防止使用 sqlite 删除某些行
writing trigger that prevent the deletion of some rows with sqlite
我有两个 table(曲目和专辑),并希望使用此触发器防止删除专辑标题为 'Lost' 的某些曲目,但代码适用于所有曲目 ID我认为。我无法删除任何曲目(曲目ID是曲目table的主键,albumid是曲目中专辑table的外键)
我的代码有什么问题?请帮忙!
谢谢
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;
我很惊讶你说你的触发器不允许从你的 table 中删除任何内容。
根据我的尝试,它不会阻止任何删除。
使用此触发器:
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;
我有两个 table(曲目和专辑),并希望使用此触发器防止删除专辑标题为 'Lost' 的某些曲目,但代码适用于所有曲目 ID我认为。我无法删除任何曲目(曲目ID是曲目table的主键,albumid是曲目中专辑table的外键)
我的代码有什么问题?请帮忙!
谢谢
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;
我很惊讶你说你的触发器不允许从你的 table 中删除任何内容。
根据我的尝试,它不会阻止任何删除。
使用此触发器:
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;