mysql 자동 증가 ID 열 값 변경

Nov 20 2020

gpid AUTO_INCREMENT NOT NULL UNIQUE열 이있는 mysql 테이블이 있습니다.

이 테이블 (5 천만 개 이상의 항목이 있음)을 채운 후 AUTO_INCREMENT, IntegrityError로 인해 트랜잭션이 실패하면 mysql이 여전히 열을 증가 시킨다는 것을 깨달았습니다 .

결과의 차이이다 AUTO_INCREMENT과 열 gpid(exemple로부터 값을 점프 gpid == 3gpid == 5두 개의 연속 된 행 사이). 이것은 기계에 대한 문제는 아니지만 내 동료와 나에게 해당됩니다.이 열의 목적은 무엇보다도 테이블의 정확한 행 수를 나타내는 것이 었습니다.

gpid테이블을 삭제하거나 다시 채울 필요없이 행이 테이블에 삽입 된 순서를 고려하여 모든 열 값을 적절한 범위 (1에서 53926669까지) 로 변경하는 방법이 있습니까? 리필하는 데 오랜 시간이 걸립니다.

감사합니다.

답변

GMB Nov 20 2020 at 13:29

MySQL은 다른 데이터베이스와 마찬가지로 자동 증가 열에 간격이 없음을 보장하지 않습니다. 테이블 번호를 다시 지정하면 특정 시점에 문제가 해결 될 수 있지만 향후 간격이 나타날 수 있습니다.

단조롭게 증가하는 시퀀스를 원하면 자동 증가가 필요한 것이 아닙니다. 대신 예를 들어보기를 만들고 다음을 사용할 수 있습니다 row_number().

create view myview as
select t.*, row_number() over(order by gpid) as new_gpid
from mytable t