5
我想確保我以正確的方式做了所有事情。sqlite將新值插入視圖
有一個我想分析的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 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, secret, x 10
where app.value = NEW.app
and secret.value = NEW.secret
and ... x 10
END;
問題:
通過觸發插入看起來不起作用。 日誌表中的實體數量遠遠小於它應該的數量,而祕密和應用中的實體數量看起來是正確的。
我認爲這是因爲當一個新的應用程序和祕密出現在日誌中。他們可以插入到表中沒有問題。但是,由於這些更改尚未提交,因此以下查詢無法成功引用這些值。
如果是這樣,我該如何解決這些查詢?
INSERT INTO raw_log(app_id,secret_id, .... x 10)
select app.id, secret.id, x 10
from app, secret, x 10
where app.value = NEW.app
and secret.value = NEW.secret
and ... x 10
可能還有一些列的空地方,因此,在做計數時,沒有得到算的?你解決了嗎?我對你的解決方案感興趣。 – cybork
你測試過我的解決方案嗎? –