选择SQLite更新(反之亦然)

时间:2010-09-06 21:55:31

标签: sqlite triggers

SQLite中是否存在单语句select-and-update(或update-and-select)方法?

触发器可以调用select,但不允许在表达式中使用更新:

CREATE TABLE id ( a integer );
CREATE TRIGGER idTrig AFTER UPDATE ON id BEGIN SELECT old.a FROM id; END;
INSERT INTO id VALUES ( 100 );
INSERT INTO test VALUES ( (UPDATE id SET a=a+1) ); -- syntax error

(触发选择是否只能通过C API访问?)

我从单个ID数据库生成多个数据库的对象ID(下一个可用ID有一行)。我想在一个语句中选择并更新ID数据库,以便附加ID数据库的并发数据库连接不会出现问题(在更新之前可以插入两个连接):

INSERT INTO tab VALUES ( (SELECT uuid||oid AS oid FROM id.tab), ... );
UPDATE id.tab SET oid = oid+1;

2 个答案:

答案 0 :(得分:0)

我将从先决条件开始:为什么不使用GUID?它们不需要中央权威,因此更有效,更容易使用。

如果您确实需要中央ID商店,则可以将ID设为自动增量并使用SELECT last_insert_rowid()获取。如果您必须生成自己的ID,请将ID列设为主键,这样您就可以生成ID INSERT,并在INSERT失败时重试。

答案 1 :(得分:0)

本讨论提出了两种可能的解决方案:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg10705.html