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;
答案 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