我有一个表,其中包含多个表的外键。每当我从该表中删除一行时,我希望首先删除子表中的所有行,然后才应删除父表中的行。
我的第一个想法是使用触发器,但我似乎无法在Slick中找到这种能力,这是我正在使用的数据库。
有没有办法在Slick中实现触发功能?
谢谢!
答案 0 :(得分:1)
是的,您可以通过使用普通的SQL查询来使用数据库触发器和函数
def checkCleared: DBIO[Int] = {
sqlu""" DROP FUNCTION IF EXISTS funk() CASCADE;
CREATE FUNCTION funk() RETURNS trigger
LANGUAGE plpgsql
AS '
BEGIN
IF OLD.cleared_can_load = FALSE AND NEW.cleared_can_load = TRUE
THEN
NEW.cleared_at = NOW() ;
END IF;
RETURN NEW;
END;
';
CREATE TRIGGER cleared
BEFORE UPDATE ON platform.product_settings
FOR EACH ROW EXECUTE PROCEDURE funk();
"""
}
然后您可以通过以下方式执行普通的SQL查询
db.run(checkCleared)