스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

AUTO_INCREMENT 초기화 및 재정렬 본문

개발/Oracle SQL

AUTO_INCREMENT 초기화 및 재정렬

워너-비 2017. 11. 28. 11:07

Mysql Workbench에서 AUTO_INCREMENT 초기화 및 재정렬




Mysql Workbench에서 AUTO_INCREMENT를 이용하여 데이터 추가 시 인덱스를 자동으로 부여하도록 설정할 수 있다.

미리 생성해놓은 USER 테이블에 데이터를 추가해주기 위해 INSERT 문을 13번 실행했다.


1
2
3
insert into user (user_name, user_email, user_password, user_profileImagePath, user_sex,
user_age, user_job, user_phoneNumber)
values("홍길동""mm@naver.com""qqqq1111""/image/userProfile/myPhoto.jpg"130"프로그래머"1011119999); 



아래와 같이 데이터가 추가된다.




여기서 user_id=10,11,12,13 튜플들을 삭제한 후 INSERT 문을 1회 실행하면 어떻게 될까?


아래의 SQL문을 순서대로 실행해보았다.

1
2
3
4
5
6
7
delete from user where user_id=10;
delete from user where user_id=11;
delete from user where user_id=12;
delete from user where user_id=13;
insert into user (user_name, user_email, user_password, user_profileImagePath, user_sex,
user_age, user_job, user_phoneNumber)
values("홍길동""mm@naver.com""qqqq1111""/image/userProfile/myPhoto.jpg"130"프로그래머"1011119999);



결과


user_id가 10이 아닌, 14부터 시작된다.

AUTO_INCREMENT은 자동으로 초기화 되지 않는다는 것을 알 수 있다.

따라서 순서대로 데이터를 정렬하기 위해서 정렬 후 초기화 작업을 해주어야 한다.



AUTO_INCREMENT가 적용된 컬럼값 재정렬


컬럼값을 정렬하기 위해서 아래와 같이 처리해준다.


1
2
SET @CNT = 0;
UPDATE USER SET USER.user_id = @CNT:=@CNT+1;



SET @CNT = 0;

UPDATE 테이블명 SET 테이블명.컬럼이름 = @CNT:=@CNT+1;  



AUTO_INCREMENT가 적용된 컬럼값 초기화


새로 데이터를 추가할 때, 본인이 원하는 인덱스부터 데이터를 생성되게 하려면 AUTO_INCREMENT를 초기화 해주면 된다.

위의 예제에서 user_id가 10부터 생성되게 하려면, 다음과 같은 sql문이 필요하다.

ALTER TABLE USER AUTO_INCREMENT = 10;


ALTER TABLE 테이블명 AUTO_INCREMENT=원하는순서;


그러나 위에서 user_id = 14 인 데이터가 남아 있으므로 에러가 발생한다.

따라서 user_id = 14 인 데이터를 user_id = 10으로 수정해 준 수 AUTO_INCREMENT를 11부터 시작하도록 설정해주어야 한다.


그리고 AUTO_INCREMENT를 다시 초기화 해주면 된다.


최종결과






Comments