重新复制并重新订购表格

时间:2010-07-05 05:54:02

标签: sql sqlite

我正在使用SQLite。我想创建一个与现有表的数据不同的新表。我尝试了以下内容,但它在Mozzilla SQLite管理工具或SQLite Manager中都不起作用。我做错了什么?

INSERT INTO temp  (SnippetID, LibraryID,Name,  BeforeSelection, AfterSelection, ReplaceSelection, NewDocument, NewDocumentLang, Sort)
                           SELECT (SnippetID, LibraryID,Name,  BeforeSelection, AfterSelection, ReplaceSelection, NewDocument, NewDocumentLang, Sort)
                           FROM Snippets  ORDER BY LibraryID;

谢谢 - JZ

2 个答案:

答案 0 :(得分:7)

我的问题是一个简单的“为什么?”。 SQL是一种关系代数,数据集只有在提取时指定它才有顺序。

谈论数据的顺序是没有意义的,因为您的数据库可以自由地强加任何它喜欢的顺序。任何体面的数据库都不会关心插入记录的顺序,只关注键和约束以及可用于有效存储和检索数据的其他属性。

仅当您使用select ... order by提取数据时,才能修复订单。如果您希望能够有效地提取LibraryID列所排序的数据,只需将其编入索引并在提取数据时使用order by子句。

答案 1 :(得分:1)

默认情况下,表在主键或表中的第一列上是“有序”的,这通常是主键。当你做的时候

select * from mytable

它使用此默认“订单”。 Pax所说的一切都是正确的,而且我给它+1。