2011-06-29 70 views
2

好吧,我有一个sqlite数据库,大约有100行。我试图去做这件事很奇怪,但我需要在每个现有行之间插入一个新行。如何将新表格行插入现有表格的每一行中?

我一直在尝试使用INSERT语句如下,但还没有任何运气:

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

所以我基本上是试图使用% - 运算符告诉我,如果ID为偶数或奇数。对于每个偶数号码,我想插入一个新的行。

我错过了什么?我能做些什么不同?我怎样才能插入一个新的行到其他行并更新索引?

谢谢

回答

2

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

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

现在,我假设你真正想要的是在id顺序中在现有行之间插入行。一种方式得到你想要的是这样的:

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

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

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

+0

我很欣赏这种见解!我知道我问的是不寻常的,我很高兴你能给我一个解决方案。 –

+0

+1表示比我好,再加上查询。 – MPelletier

0

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

相关问题