sqlite将新值插入视图

sqlite将新值插入视图,第1张

概述我想确保我以正确的方式做了一切. 我想分析一个3Gb日志文件. 为了在“:memory:”中执行所有查询以提高性能, 我将每行日志的10个文本列替换为整数ID. create table if not exists app ( id Integer primary key autoincrement, value text unique);create table if no 我想确保我以正确的方式做了一切.

我想分析一个3Gb日志文件.
为了在“:memory:”中执行所有查询以提高性能,
我将每行日志的10个文本列替换为整数ID.

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 tablescreate 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 10CREATE 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 10INSERT INTO raw_log(app_ID,secret_ID,.... x 10)select app.ID,secret.ID,x 10from app,x 10where app.value = NEW.app and secret.value = NEW.secret and ... x 10END;

问题:

插入通过触发器看起来不起作用.
日志表中的实体编号远小于应有的数量,而秘密和应用程序中的实体编号看起来正确.

我认为这是因为新的应用程序和秘密出现在日志中.它们可以毫无问题地插入表中.但是,由于尚未提交这些更改,因此以下查询无法成功引用这些值.

如果是这样,我该如何修复这些查询?

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;
总结

以上是内存溢出为你收集整理的sqlite将新值插入视图全部内容,希望文章能够帮你解决sqlite将新值插入视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存