sqlite - SQLite:FTS5 影子表中的外键引用数据
问题描述
SQLite的全文搜索扩展(FTS3、FTS4、FTS5)创建影子表。例如,如果我创建 FTS5 表
CREATE VIRTUAL TABLE test USING fts5(textData);
这还将自动创建几个真实(非虚拟)表,test_content
其中(显然)存储插入到原始虚拟表中的实际数据test
。
我知道 SQLite 作者建议这些影子表“不应由用户直接访问”。但是从文档中不清楚是否对这些表的行为没有任何保证,或者这个建议主要关注直接INSERT
或UPDATE
在它们上的尝试。但是从这些表中读取有什么风险?
具体来说 - 我需要另一个(常规)表来获得虚拟 FTS5 表的FOREIGN KEY
哪些引用:rowid
CREATE VIRTUAL TABLE test USING fts5(textData);
CREATE TABLE myTable (col1 INTEGER REFERENCES test(rowid));
我在文档中找不到这方面的提示,但我自己的实验表明外键在这里不起作用——test
即使它们是从表中引用的,我仍然可以从表中删除记录myTable
。但是,如果我这样做
CREATE VIRTUAL TABLE test USING fts5(textData);
CREATE TABLE myTable (col1 INTEGER REFERENCES test_content(id));
然后一切似乎都按需要工作 -test
如果从myTable
.
这是有效的,因为从直接检查来看,表的rowid
值test
始终等于表的id
列值test_content
。即使当我rowid
手动指定时,也会INSERT INTO test (rowid, value) VALUES (424242, 'foobar');
出现一个新行,其中test_content
包含相应的内容和对应的id
等于424242
(即使表中没有先前的记录)。
所以基本上,我的问题是 - rowid
FTS5 表和id
相应<name>_content
影子表之间的这种对应关系是否可以保证?或者这可能会在某些情况下或在未来的版本中中断?
解决方案
推荐阅读
- javascript - html 中的 Microsoft onedrive
- matlab - 找到一条线接触凸包的第一个点
- angular - Nx 升级到 v12 后无法生成组件
- mysql - 连接多个表时如何优化限制偏移量?
- python - 将样式应用于数据框中仅一列的值
- javascript - 使用js设置输入元素值时如何触发更改事件
- intellij-idea - IntelliJ IDEA GitLab 集成
- java - 运行 java -jar 和 java -cp 时没有主清单属性错误
- mongodb - 需要使用聚合框架和查找(例如计数和详细信息)将来自不同集合的文档加入 MongoDB 中的同一文档中
- kubeflow - microk8s 禁用 kubeflow 文件 disable.kubeflow.sh 错误