2010-07-05 102 views
1

我正在使用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

回答

7

我给你的问题很简单: “为什么?”。 SQL是一种关系代数,数据集只有在抽取中指定时才有序。

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

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

+0

“任何像样的数据库都不会在意插入记录的顺序”..对于InnoDB来说并不严格,因为数据以PRIMARY KEY顺序存储。如果没有定义,InnoDB将使用内部主键。以随机顺序插入表格会导致长期碎片化。 – innvo 2011-06-15 16:28:15

1

默认情况下,该表对主键或表中的第一列“排序”,无论如何这通常是主键。当你做

select * from mytable 

它使用这个默认的“订单”。尽管Pax说的一切都是真的,我对它也是+1。