标签: sqlite

单个 AND 运算符和多个 OR 运算符

我想选择一个 user_id 为 1 和 category_id 的 record_id 可以是 1、2 或 3。每个 SELECT语句都应该返回 1 条记录。

在此处查看我的示例表:

我如何在 SQL 中做到这一点?我试过这个 SQL 语句:

SELECT record_id
FROM tbl_people
WHERE category_id=1 OR category=id=2 OR category_id=3
OR category_id=4 OR category_id=5 OR category_id=6 
AND user_id = 1;
Run Code Online (Sandbox Code Playgroud)

......但它不起作用。

sqlite select

3
推荐指数
1
解决办法
3031
查看次数

为什么在删除数据库中的大量数据后,SQLite 会将未使用的磁盘空间添加到“空闲列表”中?

SQLite 常见问题说明如下:

(12) 我删除了很多数据,但数据库文件并没有变小。这是一个错误吗?

不会。当您从 SQLite 数据库中删除信息时,未使用的磁盘空间会添加到内部“空闲列表”中,并在您下次插入数据时重新使用。磁盘空间不会丢失。但它也不会返回到操作系统。

您能否向我解释该决定背后的动机(与立即将可用空间返回给操作系统相反)?这种决定(包括不明显的)的利弊是什么?

sqlite disk-space

3
推荐指数
1
解决办法
2094
查看次数

水平显示表格中的数据

我有一个存储传感器数据的表(在 SQLite 中),看起来像这样;

TABLE Timestream:
idTimestream PK autoincrementing integer, 
time int not null, 
value float not null, 
idSensor integer not null FK
Run Code Online (Sandbox Code Playgroud)

一些但并非所有传感器都有匹配时间,但我只会考虑那些有匹配时间的传感器。我想要做的是将表格重新排列为以下格式,基于查询中列出的一组传感器,而不是表格中的全部:

Time Sensor1 Sensor2 etc.
Run Code Online (Sandbox Code Playgroud)

我正在考虑创建一个临时表,然后插入时间和第一列,然后对时间进行连接以进行后续查询,最后选择整个批次。但这听起来效率不高,我想知道是否有更好的方法?

sqlite pivot

3
推荐指数
1
解决办法
1127
查看次数

在另一个程序正在修改的 SQLite 数据库上只读

我写了一个程序,它有一个 SQLite 数据库,每隔几秒钟修改一次。

现在我想编写一个小工具程序,它只会从该数据库(只读)读取一些信息并显示它。

第二个程序能否以“只读”方式打开数据库,而第一个程序可能正在修改它?打开数据库时
使用是否Read Only=True足够?
或者我是否必须复制 SQLite 文件或其他内容?
我在sqlite.org上没有找到任何关于此的提示

第二个程序不需要实时信息,它可能有点过时。

sqlite concurrency

3
推荐指数
1
解决办法
2798
查看次数

两个主列都指向同一个外部列的类似 EAV 的表

背景:我是一名程序员,虽然不得不多次使用简单的数据库,但从未使用过复杂的数据库。即我精通基本的东西,但对高级功能和设计一无所知。

我需要创建一个包含两个用户之间匹配结果的表,即:

  • table_A: user_id (primary int), 其他东西
  • table_B:user1(主外键指向 table_A user_id),user2(主外键指向 table_A user_id),其他东西

我可以强制执行user2<user1吗?这是为了防止行具有user1==user2防止在这对夫妇被反转时创建行,即我不需要同时拥有(alice,bob)(bob,alice)

- 或者 - 我一开始就做错了,还有另一种完全不同的方法来做到这一点?

显然我可以(并且将会)在添加之前检查这些值,但据我所知,如果我可以在 SQL 中添加一个约束,我最好添加它,以确保它是一致的。

数据库目前是sqlite,但如果这不能在 sqlite 中完成但可以用其他引擎完成(特别是如果 InnoDB),它也可能是一个有用的答案。

PS:我不确定这是否仍然算作 EAV,因为 AFAIK EAV 意味着来自不同表的两个主要部分,以及一个额外的列,而我将有多个。

sqlite foreign-key primary-key eav

3
推荐指数
1
解决办法
264
查看次数

加入 sqlite 中的 Update 语句

CREATE TABLE Table_1 (
    Id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,
    EmailId VARCHAR
)

INSERT INTO Table_1 VALUES (1,'raj@gmail.com');
INSERT INTO Table_1 VALUES (3,'test@gmail.com');
INSERT INTO Table_1 VALUES (4,'false5@gmail.com');
INSERT INTO Table_1 VALUES (7,'false55@gmail.com');
INSERT INTO Table_1 VALUES (8,'falsefalse@gmail.com');
INSERT INTO Table_1 VALUES (9,'true1@gmail.com');
INSERT INTO Table_1 VALUES (11,'true2@gmail.com');
INSERT INTO Table_1 VALUES (12,'falsefalsefalse@gmail.com');
INSERT INTO Table_1 VALUES (13,'ravi@gmail.com');
INSERT INTO Table_1 VALUES (14,'rak@gmail.com');
INSERT INTO Table_1 VALUES (15,'false@gmail.com');
INSERT INTO Table_1 VALUES (16,'false66@gmail.com');


CREATE TABLE Table_2 (
    Id …
Run Code Online (Sandbox Code Playgroud)

sqlite join update

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

创建Sqlite3数据库

我只是想创建一个数据库。

在我帐户的主目录中,我输入

sqlite3测试.db

然后一旦我进入 sqlite,我就会输入

。辞职

应该在当前目录中创建数据库文件。但没有这样的文件!我在其他目录中尝试过(chmodded 为 777),但无济于事。

我究竟做错了什么?操作系统是 Ubuntu 14.04 LTS。SQLite 版本 3.8.2。

sqlite

3
推荐指数
1
解决办法
2622
查看次数

默认情况下,是否所有关系 DBMS 都将表元组存储在基于主键的聚集索引中?

所以我正在阅读 MySQL innoDB,它显然默认将表数据存储在基于主键的聚集索引 (b+tree) 上,并且元组位于该 b+tree 的叶子中

https://blog.jcole.us/2013/01/10/btree-index-structures-in-innodb/

我想知道所有著名的关系数据库管理系统(如PostgreSQL、Oracle、SQL 服务器、SQLite)都以相同的方式存储吗?通过基于主键创建聚集索引(b+tree)并将数据存储在树的叶子上?

数据库中主键上的聚集索引是否基本上意味着将基于主键的表存储在 B+tree 表上?

(抱歉,如果这是一个一般性问题,但我不能针对我提到的每个数据库提出 4-5 个单独的问题,如果您只知道其中一个或几个,请告诉我)

此外,如果它的数据库默认情况下不使用集群,您能否解释它如何构建文件,例如它们是否在主键上创建一个 b+树,其中叶子指向堆内的某种地址或... ?

编辑 :

到目前为止,我们得到了除 SQLite 之外的所有问题的答案,如果有人有任何关于表在默认情况下如何实际存储在 SQLite 中的信息,请告诉。

mysql postgresql sqlite oracle sql-server

3
推荐指数
1
解决办法
494
查看次数

多个并发连接到网络共享上的同一个大型 SQLite 文件

我有一个 7GB 的 SQLite 文件,我正在从云中的不同虚拟机对它运行多个查询。一些查询使用内置的 sqlite3 包在 Python 中运行,而其他查询则源自在 DB Visualizer 中运行的 SQL 查询。文件本身位于网络共享上(出于政策原因,无法在本地复制)。

这些并发查询会互相减慢速度吗?

我可以在网络共享上多次复制 SQLite 文件,并将每个并发查询连接到它自己的文件副本。这会加快速度吗?

我可以想象 sqlite3 Python 驱动程序和 DBVisualizer 首先将数据库文件复制到本地临时存储(或内存中),在这种情况下不会获得加速,或者它们不会。

sqlite

3
推荐指数
1
解决办法
3610
查看次数

使用现有表名的WITH子句是否有效?

假设我有一张桌子Entry。在查询期间WITH替换表的子句是否有效?Entry我尝试使用 SQLite 和 MySql,它似乎可以工作,但我想在应用程序中使用它之前确定这是有意的。

让我添加一些细节。假设我有一个表Entry和另一个表Thing,以及这样的查询

SELECT Entry.k, Entry.v, Thing.v2
FROM Entry INNER JOIN Thing ON Entry.v = Thing.k
Run Code Online (Sandbox Code Playgroud)

以下内容有效吗?

WITH Entry AS (SELECT 1 AS k, 1234 AS v)
SELECT Entry.k, Entry.v, Thing.v2
FROM Entry INNER JOIN Thing ON Entry.v = Thing.k
Run Code Online (Sandbox Code Playgroud)

这似乎符合我的要求,但是我可以指望这种行为不是错误或未定义的行为吗?在 SQLite 或 MySQL 的文档中找不到任何明确允许或禁止它的内容。

(我知道在这个特定的例子中我可以SELECT ... FROM Thing WHERE ...。这不是这个问题的重点 - 请相信我,我有充分的理由编写我正在编写的查询:))

mysql sqlite query cte temporary-tables

3
推荐指数
1
解决办法
211
查看次数