我的 SQL:
这不起作用:我希望此触发器起作用。
CREATE TRIGGER sync_VerseSearch AFTER INSERT ON `VerseTranslation`
BEGIN
UPDATE VerseSearch SET text = VerseSearch.text || ' \n ' || NEW.text WHERE VerseSearch.verse_id = NEW.verse_id;
END
这里VerseTranslation
的模型verse_id
和VerseSearch
表都有对应于每个 verse_id 的数据。
但是当我在 AFTER INSERT 触发器中使用 INSERT 语句时,它正在工作,并且 AFTER UPDATE 触发器中的 UPDATE 语句也可以工作:例如:
CREATE TRIGGER sync_VerseSearch AFTER INSERT ON `VerseTranslation`
BEGIN
INSERT INTO VerseSearch (verse_id, text) VALUES(NEW.verse_id + 10000, NEW.text);
END
CREATE TRIGGER sync_VerseSearch AFTER UPDATE ON `VerseTranslation`
BEGIN
UPDATE VerseSearch SET text = VerseSearch.text || ' \n ' || NEW.text WHERE VerseSearch.verse_id = NEW.verse_id;
END
在插入中添加了 +10000,因为 VerseSearch 表中已经存在具有每个对应 verse_id(6236) 的数据,因此它不会对主键 (verse_id) 进行唯一的约束错误。
问题是相反的 ACTION(INSERT 触发器中的 UPDATE 语句)不起作用;
模型结构:
VerseTranslation {
@PrimaryKey(autogenerate=true)
id: Int,
verse_id: Int, // is not primary key // it is not unique, same verse_id multiple times.
source_id: Int,
text: String
}
VerseSearch {
@PrimaryKey
verse_id: Int, // here it is primary key // it's unique here
text: String // here I want to Concat(via trigger) all values(and future insert values) in VerseTranslation.text where match verse_id
}
谢谢。