2009-12-05 3 views
5

테이블을 "순서"로MYSQL : 어떻게 다음과 같은 테이블이

| id | name | color | 
------+--------+--------- 
| 1 | pear | green | 
| 2 | apple | red | 
| 3 | banana | yellow | 
| 4 | grape | purple | 

나는 "이름"열을 사용하여 알파벳 순서이 새로운으로 ID (자동 증가)를 재설정하고 싶습니다 어떻게 MYSQL과 함께이 작업을 수행 할 수 있습니다 다음

| id | name | color | 
------+--------+--------- 
| 1 | apple | red | 
| 2 | banana | yellow | 
| 3 | grape | purple | 
| 4 | pear | green | 

질문로 끝날하기 위해?

+3

왜 이름 순서가 이름 순서와 일치합니까? –

답변

9

이유를 묻고 싶습니다.

누군가 이름 값을 변경하거나 새 행을 삽입하면 주문 체계가 엉망이됩니다. 테이블의 다른 곳 (이름 열)에서 이미 사용할 수있는 PK의 순서에 의미를 저장하려고하면 중복 된 결과가 나올 수 있습니다.

더 나은 해결책은 ID 열의 값을 걱정하지 않고 앱에서 데이터를 사용할 때 이름 열을 정렬하는 것입니다.

PS : 무응답 유형 응답. 일반적으로 나는 당신이 좋은 이유가 있다고 가정하고 당신이하고자하는 일을 직접적으로 다룬 답을 주겠지 만, 나는 당신이 다른 질문들로부터 데이터베이스 디자인에 대한 초기 학습 단계에 있다는 것을 알아 차렸으므로 도움을 원했다. 잘못된 방향으로 나아가는 것을 돕지 않고 올바른 방향을 제시하십시오.

+1

좋은 지적입니다. 각 문자열의 정렬 된 값에 해당하는 고유 번호가 필요한 경우 추가 열을 추가하고 필요에 따라 업데이트 할 수 있습니다. ID를 재정렬하면 ID가 다른 테이블의 외래 키로 사용되는 경우 문제가 발생합니다. –

+0

테이블의 다른 열에 의해 정렬을 결정할 수없는 경우 정렬을위한 추가 열을 추가하는 것이 좋습니다. 예를 들어, 응용 프로그램에서 사용자가 항목을 임의로 재정렬하도록 허용 한 경우 – JohnFx

+1

레코드가 집합입니다. 세트는 특정 순서로 정렬되지 않아야합니다. 관계형 데이터베이스 이론은 순수한 수학 개념을 기반으로한다는 것을 상기하자. 응용 프로그램에서 특정 순서를 원할 경우 orderby 절을 추가하십시오. 그렇지 않으면 실행 계획이 데이터를 검색하는 방법을 결정하므로 순서가 결정됩니다. 이러한 계획은 시간이 지남에 따라 바뀔 수 있습니다. 또한 대리 키는 최종 사용자에게는 의미가 없음을 상기하십시오. – lmsasu

2

검색어 끝에 "ORDER BY name ASC"를 추가하지 않으시겠습니까? 내 추측으로는 어떤 이유로 ID가 필요할 것입니다.

7

이전 테이블의 새 테이블 SELECT INTO을 원하는대로 정렬 할 수 있습니다. 새 테이블에 자동 증가 ID가 있어야합니다. 필요한 경우 이전 테이블을 삭제하고 새 테이블의 이름을 바꿉니다.

-1
SELECT 
     RANK() Over (ORDER BY Name) As NewID 
    , Name 
    , Color 

FROM Fruits 

는 과일 테이블 및 삽입을 절단 한 후 절단 한 후 임시 테이블에 저장할 수 있지만 아마도 엉터리 솔루션입니다.

+0

MySQL은 창 함수를 지원하지 않습니다. –

13

자동 증가를 재설정하는 가장 깨끗한 방법은 다른 테이블을 만드는 것입니다.

MySQL은 유용한 명령어 인 CREATE TABLE LIKERENAME TABLE을 제공합니다.

CREATE TABLE table2 LIKE table1; 

INSERT INTO table2 
    SELECT * FROM table1 ORDER BY name; 

DROP TABLE table1; 

RENAME TABLE table2 TO table1; 
+0

그건 틀렸어. 모두 선택 (SELECT * FROM table1) 할 수 없으므로 행 정보와 동일한 연관으로 PK를 복사하게됩니다. 동일한 ID와 연결된 동일한 이름과 색상을 가진 똑같은 테이블로 당신을 떠날 것입니다. 그러나 다른 순서로 말입니다. – MJoraid

+0

하나의 수정, 당신 table1에서 삽입하기 전에 테이블 2에서 PK를 드롭해야합니다; 그런 다음 *를 선택하지 마십시오. 그러나 ID를 제외한 모든 열을 선택하십시오. 매력처럼 작동합니다. – Zalaboza