2012-11-06 2 views
3

이 질문은 내 old question, Getting last record from mysql과 조금 관련이 있습니다.필자의 경우 AUTO_INCREMENT가 제대로 구현 되었습니까?

그 대답에 따르면 SELECT는 (ORDER BY 절을 사용하지 않고) 특정 순서로 행을 반환하지 않을 수 있음을 알게되었습니다.

@YaK 답변에 이어 다음 명령을 사용하여 AUTO_INCREMENT을 추가했습니다.

ALTER TABLE maxID ADD sequence INT DEFAULT NULL; 
ALTER TABLE maxID ADD INDEX(sequence); 
ALTER TABLE maxID MODIFY sequence INT AUTO_INCREMENT; 

그러나 오늘 나는 하나의 질문을 얻었다.

SELECT가 (물론, ORDER BY 절을 사용하지 않고) 어떤 특정 순서로 행을 반환 보장 할 수 없습니다 은 테이블을 변경 THEN 동안, AUTO_INCREMENT가 제대로 구현 될 것 ?

+0

몇 가지 테스트를 실행 해 보셨습니까? – GregD

+0

@GregD : 아니요. 이전 질문을 읽으면서이 질문을 받았습니다. 또한 수동으로 각 행을 확인해야하고 수천 행이 있기 때문에 테스트를 수행하는 것이 어려울 것입니다 ... –

+0

어떻게 테스트 할 것인가에 달려 있습니다. 나는 (1) AUTO INCREMENT, (2) 샘플 데이터로 채우기, (3) PRIMARY KEY를 떨어 뜨림, (4) AUTO INCREMENT 값으로 새로운 열을 만든 다음, (5) 간단한'SELECT col FROM t WHERE col1! = col2' 트릭을해야합니다. InnoDB와 MyISAM 엔진 사이에는 약간의 차이가있을 수 있다고 생각합니다. – GregD

답변

1

백그라운드에서 무슨 일이 일어나고 있는지에 대한 엔진 유형에 따라 다릅니다의 MyISAM 당신이 다중 컬럼 인덱스에 보조 열을 AUTO_INCREMENT를 지정할 수 있습니다 BDB 테이블의 경우

'

. 이 경우 AUTO_INCREMENT 열의 생성 된 값은 MAX (auto_increment_column) + 1 WHERE prefix = given-prefix로 계산됩니다. 이는 데이터를 정렬 된 그룹에 넣고 싶을 때 유용합니다. '

이렇게하면 고유하지 않은 값인 auto_increment에 여러 값이있는 테이블이 만들어집니다.

그래서 실제로는 InnoDB 테이블에 대해 auto_increment (필수 사항은 아님)가있는 PRIMARY KEY가 있어야합니다. 단순 선택은 order by 절을 선택하지 않은 경우이 순서로 저장되고 정렬에 기본 키를 사용하기 때문에 기본 키 순서로 값을 반환합니다.

항상 특정 순서를 지정하려면 원하는 경우 PRIMARY KEY를 사용하고 항상 지정하십시오.

관련 문제