Triggers 无子项时删除父项的SQLite触发器expr
SQLite数据库中有一组经典的父/子表:Triggers 无子项时删除父项的SQLite触发器expr,triggers,sqlite,conditional,Triggers,Sqlite,Conditional,SQLite数据库中有一组经典的父/子表: CREATE TABLE ImageGallery ( ImageGalleryId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , Name VARCHAR(80) UNIQUE NOT NULL ); CREATE TABLE Image ( ImageId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , Image
CREATE TABLE ImageGallery (
ImageGalleryId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
Name VARCHAR(80) UNIQUE NOT NULL
);
CREATE TABLE Image (
ImageId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
ImageGalleryId INTEGER NOT NULL,
Filename VARCHAR(260) NOT NULL,
FullPath VARCHAR(260) NOT NULL
);
如果图像库中没有其他图像,则需要在删除图像后触发一个触发器,该触发器将删除该图像库,基本上如下所示:
if ((select count(*) from Image where ImageGalleryId = old.imageGalleryId) == 0) then
begin
delete from ImageGallery where ImageGalleryId = old.imageGalleryId
end
这在SQLite方言中到底是什么样子的?SQLite没有IF语句 但是,触发器具有以下特性:
CREATE TRIGGER xxx
AFTER DELETE ON Image
WHEN (SELECT COUNT(*) FROM Image WHERE ImageGalleryId = OLD.ImageGalleryId) = 0
BEGIN
DELETE FROM ImageGallery WHERE ImageGalleryId = OLD.ImageGalleryId;
END;