Android 更新触发器-更新触发器表以外的表

Android 更新触发器-更新触发器表以外的表,android,sqlite,android-sqlite,triggers,Android,Sqlite,Android Sqlite,Triggers,userNotesTable: _id integer primary key, name text, extra text 用户提醒表: _id integer primary key, noteid ineteger, FOREIGN KEY(noteid) REFERENCES userNotesTable(id) ON DELETE CASCADE 插入触发器: CREATE TRIGGER trigger_name AFTER INSERT ON userRemindersTabl

userNotesTable:

_id integer primary key,
name text,
extra text
用户提醒表:

_id integer primary key,
noteid ineteger,
FOREIGN KEY(noteid) REFERENCES userNotesTable(id) ON DELETE CASCADE
插入触发器:

CREATE TRIGGER trigger_name
AFTER INSERT ON userRemindersTable BEGIN INSERT INTO searchTable (id,noteId)
VALUES (new.id,new.noteId); 
END;
更新触发器:

CREATE TRIGGER trigger_name
AFTER UPDATE ON userRemindersTable BEGIN 
UPDATE searchTable SET _id = new._id, noteid = new.noteid WHERE id IS new.id;
UPDATE searchTable SET name = new.name, extra  = new.extra WHERE id IS new.noteid;
END;
这是数据库的当前代码以及提醒表的特定触发器。我所做的困难是从用户注释表中的特定名称和额外名称,以及从提醒表中的特定注释ID中选择,所有这些都在更新触发器中


当插入时,id和noteid会插入到提醒和搜索表中,但我希望能够使用用户备注表中的特定名称和额外内容更新搜索表,这可能吗?

呈现的代码中存在一些异常,因此我对其进行了处理,对其进行了一些修改,使其能够运行,并且给出了足够多的例子,你应该能够用它来做你想做的事情

这里的主要问题是,要更新触发ON update触发器的表以外的表,必须连接表和SQLite

我使用了一个名为SQLite Studio的小实用程序来重新创建场景。可在以下位置获取:

以下是我用来重新创建数据库的代码:

我注意到一些ID列被命名为_ID,而另一些ID列被命名为_ID,所以我将它们全部命名为_ID;相反,当触发器执行时,我得到了一个运行时错误

在触发器中,请注意,我已将FOR每行添加到每个触发器中。这允许对插入或更新的每一行进行处理,而不是每次执行一个整体更新语句。我还省略了searchTable中ID列的更新,因为更新将列值设置为自身

以下是触发器创建DDL:

我测试了在userNotesTable中创建记录。然后,当我在UserMembersTable中创建一些记录时,INSERT触发器触发并将相应的记录插入到searchTable中

更新UserMembersTable中的记录时,searchTable中的名称和额外字段将基于相应的noteid进行设置


我假设UserMembersTable中有一些被省略的字段,因为实际上没有任何东西需要更新以进行测试,所以我更新了_id字段。此外,对于INSERT触发器,我故意省略了名称和额外字段的设置,因为在问题中没有提到它们,尽管它们可能还需要添加到ON INSERT触发器中的INSERT语句中。

是否故意让INSERT和UPDATE触发器共享相同的名称触发器名称?是的。关于如何使用提醒中的特定noteid从用户备注表中选择name和extra,有什么建议吗?救了我的命,谢谢!
CREATE TABLE userNotesTable ( 
    _id   INTEGER PRIMARY KEY,
    name  TEXT,
    extra TEXT 
);

CREATE TABLE userRemindersTable ( 
    _id    INTEGER PRIMARY KEY,
    noteid INTEGER,
    FOREIGN KEY ( noteid ) REFERENCES userNotesTable ( _id ) ON DELETE CASCADE 
);

CREATE TABLE searchTable ( 
    _id    INTEGER PRIMARY KEY,
    noteId INTEGER,
    name   TEXT,
    extra  TEXT 
);
CREATE TRIGGER trg_userRemindersTable_onInsert
AFTER INSERT ON userRemindersTable 
for each row
begin
    INSERT INTO searchTable (_id, noteId)
    VALUES (new._id, new.noteId); 
end;


CREATE TRIGGER trg_userRemindersTable_onUpdate
AFTER UPDATE ON userRemindersTable 
for each row
begin


    UPDATE searchTable
    SET name = (SELECT name
      FROM userNotesTable
      WHERE _id = new.noteId)
    where noteId = new.noteId;             


    UPDATE searchTable
    SET extra = (SELECT extra
      FROM userNotesTable
      WHERE _id = new.noteId)
    where noteId = new.noteId;              


END;