标签: sqlite

如何正确格式化sqlite shell输出?

如果我去mysql shell输入SELECT * FROM users我得到 -

+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME           | EMAILID                         | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
|    137 | X              | b@cc.com                        | #        | ADMIN     |                166 |                110 |
|    138 | Kshitiz        | ksharma@aaa.com                 | asdf     | ADMIN     |                167 |                111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)

Oracle sqlplus 显示——

USERID     NAME  EMAILID    PASSWORD   USER_TYPE  CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137        X     b@cc.com   #          ADMIN …
Run Code Online (Sandbox Code Playgroud)

sqlite

121
推荐指数
4
解决办法
8万
查看次数

是否可以在 SQLite 中存储和查询 JSON?

我需要将 JSON 对象存储在 SQLite 数据库中,然后对其进行复杂的查询。

我做了一个这样的表:

+--------------------------------------+
|document |  property | string | number|
+--------------------------------------+
|foo      |  "title"  | "test" |       | 
+--------------------------------------+
|foo      |  "id"     |        |  42   | 
+--------------------------------------+
|bar      |  "id"     |        |  43   | 
+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)

对于两个对象

foo {"title": "test", "id": 42} 
bar {id: 43}
Run Code Online (Sandbox Code Playgroud)

但我不能做“AND”查询,比如:

SELECT DISTINCT id  FROM table WHERE title = "test" AND id = 42 
Run Code Online (Sandbox Code Playgroud)

如您所见,“WHERE”之后的部分完全是胡说八道,但我不知道如何创建一个可以做我想做的查询。

那么您认为有更好的方法来存储我的数据,还是有一种解决方法来执行“AND”查询?

当然,JSON 可以包含任何属性,因此我无法为每个属性创建一个包含列的表。

我正在使用 WebSQL,它是没有扩展的 SQLite。

我知道我的问题很具体,但你能帮我吗?

sqlite json

51
推荐指数
3
解决办法
10万
查看次数

是否可以将 SQLite 用作客户端服务器数据库?

是否有任何技术或工具可以在中等规模/流量/并发数据库环境中使用 SQLite?

sqlite

38
推荐指数
3
解决办法
7万
查看次数

对于绝对性能,SUM 更快还是 COUNT?

这与计算符合特定条件的记录数有关,例如invoice amount > $100

我倾向于更喜欢

COUNT(CASE WHEN invoice_amount > 100 THEN 1 END)
Run Code Online (Sandbox Code Playgroud)

然而,这同样有效

SUM(CASE WHEN invoice_amount > 100 THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)

我认为 COUNT 更可取有两个原因:

  1. 传达意图,即 COUNT
  2. COUNT 可能i += 1某处涉及一个简单的操作,而 SUM 不能指望它的表达式是一个简单的整数值。

有没有人有关于特定 RDBMS 差异的具体事实?

mysql postgresql sqlite oracle sql-server

36
推荐指数
2
解决办法
4万
查看次数

SQLite 的限制

从单用户、嵌入式、面向原型的数据库引擎中,sqlite 数据库能走多远?

sqlite

23
推荐指数
1
解决办法
2544
查看次数

在 SQLite 中存储价格,使用什么数据类型?

我正在使用 SQLite 并且需要存储价格。SQLite 的REAL数据类型表示它使用的价格存储floating-point不可接受的。除了 TEXT 之外,还有其他数据类型可以用来以数字方式存储价格,以便它们正确排序吗?

sqlite datatypes money

20
推荐指数
2
解决办法
3万
查看次数

为什么当我索引列时这个 sqlite 查询要慢得多?

我有一个带有两个表的 sqlite 数据库,每个表有 50,000 行,包含(假)人的名字。我构建了一个简单的查询来找出有多少个名字(名字、中间名首字母、姓氏)是两个表共有的:

select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;
Run Code Online (Sandbox Code Playgroud)

当除了主键上没有索引(与此查询无关)时,它运行得很快:

[james@marlon Downloads] $ time sqlite3 generic_data_no_indexes.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;"
131

real    0m0.115s
user    0m0.111s
sys     0m0.004s
Run Code Online (Sandbox Code Playgroud)

但是如果我为每个表的三列添加索引(总共六个索引):

CREATE INDEX `idx_uk_givenname` ON `fakenames_uk` (`givenname` )
//etc.
Run Code Online (Sandbox Code Playgroud)

然后它运行得很慢:

[james@marlon Downloads] $ time sqlite3 generic_data.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;"
131

real    1m43.102s
user    0m52.397s
sys …
Run Code Online (Sandbox Code Playgroud)

sqlite performance index optimization count

16
推荐指数
1
解决办法
2万
查看次数

如何防止 SQLite 数据库锁定?

从 SQLite FAQ 我知道:

多个进程可以同时打开同一个数据库。多个进程可以SELECT同时进行。但是,任何时候只有一个进程可以对数据库进行更改。

所以,据我所知,我可以:1) 从多个线程 ( SELECT) 读取数据库 2) 从多个线程 ( SELECT)读取数据库并从单线程 ( CREATE, INSERT, DELETE)写入

但是,我读到了Write-Ahead Logging,它提供了更多的并发性,因为reader do not block writers and a writer do not block readings。读和写可以同时进行。

最后,当我找到时,我完全糊涂,当指定时:

以下是出现 SQLITE_LOCKED 错误的其他原因:

  • 试图CREATEDROP表或索引而SELECT声明仍悬而未决。
  • 当 aSELECT在同一张表上处于活动状态时尝试写入表。
  • 尝试SELECT在多线程应用程序中同时在同一张表上执行两个操作,如果 sqlite 未设置为这样做。
  • fcntl(3,F_SETLK 对 DB 文件的调用失败。例如,这可能是由 NFS 锁定问题引起的。此问题的一种解决方案是将 DB 移走,然后将其复制回来,使其具有新的 Inode 值

所以,我想为自己澄清一下,有必要避免锁吗?我可以从两个不同的线程同时读取和写入吗?谢谢。

sqlite locking

14
推荐指数
1
解决办法
6万
查看次数

使用点命令编写 SQLite 脚本

是否可以编写包含 SQLite 点命令( vis. .read file.sql; .separator ,; .import file.csv;)的脚本?

我正在构建并反复重建 SQLite 数据库,每次重建数据库时都需要输入大约 24 个点命令语句。如果我可以将这些命令放在脚本中并让 SQLite 读取它们,那就太好了。

有没有办法将点命令(而不是SQL 语句)放入脚本并让 SQLite 运行它们?

我在 Mac OS X 上使用 bash。

sqlite scripting

12
推荐指数
1
解决办法
1万
查看次数

选择具有最小值的所有行

在 Sqlite 3 中,我试图弄清楚如何根据最小值选择行。我认为我对相关术语的了解不足,无法有效地搜索谷歌。

该表看起来像:

num         text        num2      
----------  ----------  ----------
0           a           1         
0           a           2         
1           a           3         
1           b           4         
Run Code Online (Sandbox Code Playgroud)

我想获取num2is1, 2和的行4。我想根据文本列的每个唯一值的 num 的最小值进行选择。

所以,对于text = 'a',最小值num0,所以我想要第 1 行和第 2 行。对于text = 'b',最小值num1,所以我想要行4

使用 group by 的各种组合,我可以得到行12或行14。我觉得我缺少一个可以做我想做的事情的 SQL 组件,但我一直无法弄清楚它可能是什么。

执行此类查询的正确方法是什么?

可能的解决方案

我找到了一种方法来做到这一点。我的声誉不足以回答我自己的问题,所以我在这里进行更新。我不确定它是否总是正确的或效率如何。欢迎提出任何意见。

我使用了一个复合选择语句,其中一个查询为文本的每个唯一值找到 num 的最小值:

sqlite> select …
Run Code Online (Sandbox Code Playgroud)

sqlite

11
推荐指数
1
解决办法
10万
查看次数