2010-07-05 3 views
1

Я использую SQLite. Я хочу создать новую таблицу, упорядоченную иначе, чем данные существующих таблиц. Я пробовал следующее, но он не работает ни в инструментах администрирования Mozite для SQLite, ни в SQLite Manager. Что я делаю не так?Re copy and re-order table

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

1

По умолчанию таблица «упорядочена» на первичный ключ или первый столбец в таблице, который часто является основным ключом. когда вы делаете

select * from mytable 

он использует этот «заказ» по умолчанию. Все, что говорит Пакс, правда, и я +1 к нему.