2010-07-05 3 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은 관계형 대수 (relational algebra)이며 데이터 집합은 추출 할 때만 지정할 수 있습니다.

데이터베이스는 원하는 순서대로 자유롭게 지정할 수 있으므로 데이터 순서에 대해 이야기하는 것은 의미가 없습니다. 괜찮은 데이터베이스는 레코드가 삽입되는 순서와 데이터를 효율적으로 저장하고 검색하는 데 사용할 수있는 키와 제약 조건 및 기타 속성 만 고려합니다.

select ... order by으로 데이터를 추출 할 때만 명령을 수정해야합니다. LibraryID 열에 의해 정렬 된 데이터를 효율적으로 추출하려면 데이터를 추출 할 때 인덱스를 지정하고 order by 절을 사용하기 만하면됩니다.

+0

"괜찮은 데이터베이스는 레코드가 삽입되는 순서에 상관 없습니다."데이터가 PRIMARY KEY 순서로 저장되므로 InnoDB의 경우와 완전히 같지 않습니다. 내부 키가 정의되어 있지 않은 경우, InnoDB는 내부 기본 키를 사용합니다. 임의의 순서로 테이블에 삽입하면 장기적으로 조각화가 발생합니다. – innvo

1

기본적으로 테이블은 기본 키 또는 테이블의 첫 번째 열 (일반적으로 기본 키인 경우)에 "정렬"되어 있습니다. 당신이 할 때

select * from mytable 

이 기본 "주문"을 사용합니다. 팍스의 모든 말은 사실이지만 나는 그것에 +1합니다.