我是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
答案 0 :(得分:1)
No, there are no array/list/vector data types in SQLite。 The string concatenation operator in SQLite is ||
答案 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中没有列表数据类型。
但是你可以解决这个限制:
显然,JSON会对性能产生很大影响,在列表中添加元素需要花费时间(读取,反序列化,添加,序列化,更新)。