SQLite中的向量/列表

时间:2012-03-18 03:23:41

标签: sql sqlite

我是SQL新手,有列表或向量变量类型吗?我可以使用类型为字符串列表的列吗?

可能是这样的:

CREATE TABLE myTbl(domain varchar PRIMARY KEY, linkList list<varchar>);

我可以附加一个这样的字符串(使用'+ ='运算符):

UPDATE myTbl SET linkList += "www.test.com," WHERE domain="blah";
// Table is like so
CREATE TABLE myTbl(domain varchar PRIMARY KEY, linkList varchar);
// Column linkList is a string of links separated by comma's

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您可以使用 json1 扩展名在 SQLite 字段中存储列表:https://www.sqlite.org/json1.html

所以你的架构看起来像:

CREATE TABLE myTbl(
    domain varchar PRIMARY KEY,
    linkList JSON DEFAULT('[]'));

并附加一个项目:

UPDATE myTbl
SET linkList = json_insert(linkList, '$[#]', "www.test.com")
WHERE domain="blah";

SQLite JSON 支持非常灵活,特别是对于较新版本的 SQLite。您可以根据 JSON 的内容设置 indices on JSON expressions 以进行快速匹配。您可以将其与 generated columns 结合使用以进行动态数据提取。

尝试将其复制粘贴到 sqlite3 命令行或 https://sqliteonline.com/ 中:

CREATE TABLE myTbl(
    domain varchar PRIMARY KEY,
    linkList JSON DEFAULT('[]'));
INSERT INTO myTbl(domain) VALUES ("blah");

UPDATE myTbl
SET linkList = json_insert(linkList, '$[#]', "www.test.com")
WHERE domain="blah";

UPDATE myTbl
SET linkList = json_insert(linkList, '$[#]', "www.example.com")
WHERE domain="blah";

SELECT * FROM myTbl;

注意:此示例需要 SQLite 3.31 来使用 $[#] 表示法。

答案 2 :(得分:0)

据我所知,在SQLite中是不可能的(这可能是名称中'Lite'的原因之一)。在引擎盖下它只有存储类型:64位整数SQLITE_INTEGER,64位浮点数(双精度)SQLITE_FLOAT,blob(二进制)SQLITE_BLOB和字符串SQLITE_TEXT。所有SQL类型都映射到这些类型。还有SQLITE_NULL

答案 3 :(得分:0)

SQLite中没有列表数据类型。

但是你可以解决这个限制:

  1. 将您的列表转换为JSON(包括单独转义每个元素),
  2. 将JSON字符串作为SQLITE_TEXT放入表中。
  3. 显然,JSON会对性能产生很大影响,在列表中添加元素需要花费时间(读取,反序列化,添加,序列化,更新)。