sqlite将新值插入视图
发布时间:2020-12-12 19:00:36 所属栏目:百科 来源:网络整理
导读:我想确保我以正确的方式做了一切. 我想分析一个3Gb日志文件. 为了在“:memory:”中执行所有查询以提高性能, 我将每行日志的10个文本列替换为整数ID. create table if not exists app ( id Integer primary key autoincrement,value text unique);create ta
我想确保我以正确的方式做了一切.
我想分析一个3Gb日志文件. create table if not exists app ( id Integer primary key autoincrement,value text unique ); create table if not exists secret ( id integer primary key autoincrement,value text unique ); and 10 more tables create table if not exists raw_log ( id Integer primary key autoincrement,app_id INTEGER,secret_id INTEGER,and 10 more _id columns ); 并创建查询视图和插入触发器. create view if not exists log as Select raw_log.id,app.value as app,secret.value as secret,and 10 more ... from raw_log,app,secret,..... x 10 where raw_log.app_id = app_id.id and raw_log.secret = secret.id and ... x 10 CREATE TRIGGER insert_log INSTEAD OF INSERT ON log FOR EACH ROW BEGIN INSERT OR IGNORE INTO app(value) VALUES(NEW.app); INSERT OR IGNORE INTO secret(value) values(NEW.secret); ... x 10 INSERT INTO raw_log(app_id,secret_id,.... x 10) select app.id,secret.id,x 10 from app,x 10 where app.value = NEW.app and secret.value = NEW.secret and ... x 10 END; 问题: 插入通过触发器看起来不起作用. 我认为这是因为新的应用程序和秘密出现在日志中.它们可以毫无问题地插入表中.但是,由于尚未提交这些更改,因此以下查询无法成功引用这些值. 如果是这样,我该如何修复这些查询? INSERT INTO raw_log(app_id,.... x 10) select app.id,x 10 from app,x 10 where app.value = NEW.app and secret.value = NEW.secret and ... x 10 解决方法要获取插入的id,请使用last_insert_rowid(),但如果我不确定您是否在冲突中获得id,那么您必须使用ifnull来获取插入raw_log的id.你在下一次插入之前保存了last_insert_rowid()的值,这就是你必须使用变量的原因…… CREATE TEMP TABLE IF NOT EXISTS _Variables (Name TEXT PRIMARY KEY,Value TEXT); ... INSERT OR IGNORE INTO app(value) VALUES(NEW.app); INSERT OR REPLACE INTO _Variables(Key,Value) VALUES('app_id',ifnull((SELECT app.id from app where app.value = NEW.app),last_insert_rowid()); ... INSERT INTO raw_log(app_id,... x 10) values((SELECT Value FROM _Variables WHERE Key = 'app_id'),(SELECT Value FROM _Variables WHERE Key = 'secret_id'),... x 10 ); END; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |