我正在使用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
答案 0 :(得分:7)
我的问题是一个简单的“为什么?”。 SQL是一种关系代数,数据集只有在提取时指定它才有顺序。
谈论数据的顺序是没有意义的,因为您的数据库可以自由地强加任何它喜欢的顺序。任何体面的数据库都不会关心插入记录的顺序,只关注键和约束以及可用于有效存储和检索数据的其他属性。
仅当您使用select ... order by
提取数据时,才能修复订单。如果您希望能够有效地提取LibraryID
列所排序的数据,只需将其编入索引并在提取数据时使用order by
子句。
答案 1 :(得分:1)
默认情况下,表在主键或表中的第一列上是“有序”的,这通常是主键。当你做的时候
select * from mytable
它使用此默认“订单”。 Pax所说的一切都是正确的,而且我给它+1。