重新复制并重新排序表
问题描述:
我正在使用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
答
我给你的问题很简单: “为什么?”。 SQL是一种关系代数,数据集只有在抽取中指定时才有序。
由于您的数据库可以*地强加它喜欢的任何顺序,因此讨论数据的顺序是没有意义的。任何像样的数据库都不会在乎插入记录的顺序,而只关心可用于有效存储和检索数据的键和约束以及其他属性。
仅当您使用select ... order by
提取数据时,顺序必须修复。如果您希望能够有效地提取您的LibraryID
列所排序的数据,只需将其索引并在提取数据时使用order by
子句。
答
默认情况下,该表对主键或表中的第一列“排序”,无论如何这通常是主键。当你做
select * from mytable
它使用这个默认的“订单”。尽管Pax说的一切都是真的,我对它也是+1。
“任何像样的数据库都不会在意插入记录的顺序”..对于InnoDB来说并不严格,因为数据以PRIMARY KEY顺序存储。如果没有定义,InnoDB将使用内部主键。以随机顺序插入表格会导致长期碎片化。 – innvo 2011-06-15 16:28:15