2010-02-18 3 views
5

저는 MySQL 5.0 서버를 사용하고 있습니다. 내 요구 사항은 자동 증분 기본 키가있는 기존 테이블에 하나의 특수 행을 추가하는 것입니다.AUTO_INCREMENT 속성을 가진 열에 0을 사용할 수 있습니까?

우리가이 행의 ID를 0으로 만들 수 있다면 프로젝트의 유지 관리 및 관리에 매우 유용합니다 (수동 관측에서는 쉽게 기억하고 쉽게 파악할 수 있기 때문에).

이제 자동 증가 열에 자신의 값을 사용하여 MySQL에 아무런 문제가 없다는 것을 알았습니다. 그리고 테스트에서 UPDATE 쿼리로 행의 autoincrement 기본 키를 0으로 설정할 수 있음을 알았습니다. 그러나 이것이 향후 INSERT에서 자동 증가 기능에 어떤 영향을 미칠지에 대한 우려가 제기되고 있습니다.

내 (제한적) 실험은 이상한 점을 보여 주었고 이에 대한 구체적인 경고는 MySQL 문서에서 찾을 수 없습니다. http://dev.mysql.com/doc/refman/5.0/en/create-table.html

테이블 당 하나의 AUTO_INCREMENT 컬럼이있을 수 있습니다, 그것은 인덱싱되어야하며, 그것은 DEFAULT 값을 가질 수 없습니다 : 즉,이 (강조 광산)에서 떨어져있다. AUTO_INCREMENT 열은 양수 값만 포함하는 경우에만 올바르게 작동합니다. 음수를 삽입하는 것은 매우 큰 양수를 삽입하는 것으로 간주됩니다. 이 숫자가 양에서 음으로 이상 "랩"또한 실수 나에 대한 설명을 찾을 수 없습니다 오전 0

를 포함하는 AUTO_INCREMENT 컬럼을하지 않도록 할 때 정밀도 문제를 방지하기위한 것입니다 AUTO_INCREMENT 컬럼에서 0의 값을 갖는 것이 무엇이 잘못 되었습니까? 그렇다면 0을 포함하는 AUTO_INCREMENT 컬럼을 갖는 것이 나쁜 것인가?

답변

2

이미 발견 했으므로 자동 증가 필드에 INSERT를 사용하여 0을 asign 할 수는 없으므로 업데이트를 사용해야합니다. AFAIK 당신이 덤프 및 가져 오기를 시도 할 때를 제외하고는 0을 갖는 것이 잘못되었습니다. 그러나 먼저 데이터를 삽입 한 다음 나중에 자동 증가 필드로 표시하여이를 피할 수 있습니다.

+0

다시 가져 오기를 요청하는 것이 좋습니다. 우리가 자주 그렇게하지 않는 것으로 생각하지는 않았지만, 우리가 그렇게 할 경우에 대비할 것입니다. 내가 아는 한 자동 증가 열에도 0이 잘못 표시되지 않습니다. :). 하지만 제가 인용 한 글은 그렇지 않다고 제안했기 때문에, 참고 매뉴얼에 왜 그 이유가 설명되어 있는지, 왜 틀릴지 설명하는 대답을 얻기를 희망했습니다. 자동 증가 열에서 0에 아무런 문제가 없다는 확신이 있습니까? –

+0

나는 너가 괜찮을 것이라고 확신한다. 이 한 번은 내 코드의 버그로 인해 자동 증가 필드에 0을 가졌지 만 불리한 부작용이 없었습니다. – e4c5

1

0을 저장하는 것은 권장되지 않습니다. 예를 들어 mysqldump으로 테이블을 덤프하고 다시로드하면 MySQL은 일반적으로 0 값을 만나면 새 시퀀스 번호를 생성하여 덤프 된 것과 다른 내용의 테이블을 만듭니다. 덤프 파일을 다시로드하기 전에 NO_AUTO_VALUE_ON_ZERO을 사용하면이 문제가 해결됩니다. mysqldump은 자동으로이 문제를 피하기 위해 NO_AUTO_VALUE_ON_ZERO을 사용할 수있는 명령문을 출력에 자동으로 포함합니다.

관련 문제