<진실의 방 Mysql 02. alt 지옥?! 에 빠진 나.?>

강민수·2021년 12월 19일
0

진실의 방

목록 보기
13/26

필자는 데이터 삽입까지 저렇게 잘 헤나가고 있었다. 그런데... 문제가 생기고 만다.

아래는 필자가 실제 미션을 진행하면서 겪은 문제다.

1. 문제의 시작.

오잉? 왜? 갑자기 아이디 값이 저렇게 되었나? 아.... 안돼!!!!!

내 테이블을 돌려 놓아라ㅜㅜ 과연 어떻게 된 일일까?
사건의 전말은 이러하다.

필자는 테이블 작성을 하고, 데이터를 잘 넣고 있었다. 그런데 갑자기 데이터가 잘못 입력한 것을 발견했다. 그래서 깔끔히 데이터 삭제를 위해

delete table

깔끔하게 전체 삭제를 하고 다시 해야겠다는 생각이 들어 과감히 딜리트를 했다.

그리고 다시 인서트 인투를 통해 해당 테이블에 데이터를 입력했는데... 그리고 다시 select*from 테이블 이름을 시전한 순간...

테이블의 아이디가 저렇게 해괴망측하게 나와 버린 것이다... ㅜㅜ

02. 문제의 원인은 auto increment

그래서 물론 스트레스는 받았지만, 도대체 뭐가 문제일까 구글링을 해 봤다.

그랬더니... 나같은 초보가 많이 하는 실수이자 테이블의 속성에 대해 잘 몰랐던 과오였던 것이다.


자~ 다시 한 번 desc를 통해 테이블의 속성을 살폈다. 특히 id....
혹시 저기서 무엇이라고 생각하는가?

끝에 보이는 auto_increment가 바로 사건의 발단이었다. 그냥 관례적으로 쓰길래 쓴 것 뿐이었는데... 그게 이렇게 화가 될 지는 몰랐다...

보통 MySQL에서 int 자료형의 기본키(Primary Key)가 설정된 컬럼에 대해 레코드 삽입 시 자동으로 1씩 증가하는 설정이 가능하다. 이때 사용하는 것이 바로 auto increment다. 그래서 우리가 보통 데이터 삽입 시에 굳이 아이디 값을 설정해 주지 않더라도 자동적으로 입력이 되는 편의성과 더불어 테이블 설정상에서 의무적으로 써야 에러가 나지 않는다.

만약 기본키(Primary Key)가 설정되지 않을 경우 다음과 같은 에러가 발생된다.

mysql> create table user(idx int auto_increment, name varchar(100));
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

03. 오류의 근본.

그렇다면, 이렇게 자동적으로 숫자가 늘어나면, 당연히 우리가 데이터를 삭제하고 재입력하면 자동적으로 1로 리셋되는 거 아닌가?

필자도... 그렇게 착각하고 사용했었다. 하지만, 알아보니 테이블 속성 자체가 전혀 그렇지가 않더라...ㅜㅜ

즉, 테이블에서 데이터가 유일무이하게 가지는 값이 id다. 그런데 이 id 값은 한 번 데이터에 부여가 되면 그 데이터와 한 몸이 된다. 따라서 삭제되면 함께 삭제되는 것이다. 그래서 우리는 하나의 작업이 더 필요했다.

04. 정답은 바로 재설정!

그렇다. 정답은 바로 auto increment를 재설정해 주는 것이다.

즉, 시작 값을 변경해줘야만 테이블에서 아이디 값의 탈주를 막을 수 있다.

alter table 테이블명 auto_increment=시작값;

그래서 데이터의 중간 값을 삭제하고나서 다시 새로운 데이터의 아이디 값을 순차적으로 맞춰주기 위해서는 꼭 알터를 통해 시작값을 바꿔줘야 한다.
자 이렇게 하고 데이터를 다시 넣고 조회하면, 1부터 쭉 다시 잘 넣어진다.

이걸 몰라서 필자는 몇 시간은 고생한 것 같은데... 이제라도 알았으니 앞으로는 크게 당황스럽지는 않을 것 같다.

꼭 기억하자! id는 삭제시 초기화가 안 된다!!!!

그러면 다음 포스팅에서 다시 뵙겠다~

그럼 이만~

================to be continued========================

profile
개발도 예능처럼 재미지게~

0개의 댓글