如何在sqlite3上的多个键上创建触发器

时间:2009-04-21 15:17:27

标签: sql sqlite triggers

据我所知,没有直接的能力在SQLite 3中有外键约束。我有一个需要这个的多对多表,所以我创建了一个触发器,当外来时引发ABORT违反了键约束。我的陈述如下:

CREATE TRIGGER fkFooBar
  BEFORE INSERT ON Foo_Bar
  FOR EACH ROW BEGIN
    SELECT RAISE (ABORT, 'Insert on Foo_Bar violates foreign key')
    WHERE ((SELECT id as fId FROM FOO WHERE fId = NEW.fooId) IS NULL) || ((SELECT id as bId FROM BAR WHERE bId = NEW.barId) IS NULL);
  END;

但这仅限于barId存在,而不是fooId。我只是模糊地熟悉SQL,之前没有处理过触发器,所以我对此有点迷失。为什么这不起作用?我是以错误的方式来做这件事的吗?这应该更简单吗? (即在一个SELECT语句中)

2 个答案:

答案 0 :(得分:0)

接受提示。

触发通常是一个坏主意。你已经发现了触发器经常出错的另一个原因。

主要原因是触发器将您的编程分为两部分。代码 - 代码 - 易于查找和维护 - 以及隐藏在数据库中的代码,更难以查找和维护。

如果真的很难,那你就是使用了错误的工具。

答案 1 :(得分:0)

由于没有其他人真正回答问题我问:

||在sqlite中不是二进制OR。只需使用单个|

相关问题