2

好的,我有一个 sqlite 数据库,它大约有 100 行。这是我正在尝试做的一件奇怪的事情,但我需要在每个现有行之间插入一个新行。

我一直在尝试按如下方式使用 Insert 语句,但没有任何运气:

insert into t1(column1) values("hello") where id%2 == 0

所以我基本上是在尝试使用 %-operator 来告诉我 id 是偶数还是奇数。对于每个偶数 ID,我想插入一个新行。

我错过了什么?我能做些什么不同的事情?如何在每隔一行中插入一个新行并更新索引?

谢谢

4

2 回答 2

2

您的问题假定这些行具有某种内置顺序,并且您可以在其他行之间插入行。这不是真的。

确实,行在磁盘上是有顺序的,并且id列通常是按顺序分配的,但这是一个实现细节。ORDER BY当您执行查询时,数据库可以自由地以它选择的任何顺序返回行,除非您使用子句指定您想要的内容。

现在,我假设您真正想要的是在现有行之间按id顺序插入行。获得您想要的东西的一种方法如下所示:

UPDATE t1 SET id = id * 2
INSERT INTO t1 (id, column) SELECT id+1, "hello" FROM t1

UPDATE将使所有现有行的 id 加倍(因此 1,2,3 变为 2,4,6);然后INSERT将在 t1 上执行查询并使用结果插入一组新行,其id值比现有行多一个(因此 2、4、6 变为 3、5、7)。

我没有测试上述语句,所以我不知道它们是否会起作用,或者它们是否需要一些额外的技巧(如临时表),因为我们在一个语句中查询和更新同一个表。我也可能犯了语法错误。

于 2011-06-30T00:11:01.710 回答
0

不要认为这些行在数据库中是预先排序的。数据库将在它们进入时或根据索引存储它们。您的任务是根据您的需要在检索时(即查询数据时)对它们进行排序。

于 2011-06-30T00:05:25.233 回答