MySQL Auto Increment

Haechan Kim·2023년 9월 18일
0

Spring

목록 보기
50/69

User
mysql에서 테이블을 truncate 했어.
그 후 새로운 데이터를 삽입했는데 id가 1이 아니라 이전에 있었던 id 다음 수가 들어가. 이유가 뭐야?
스프링을 사용했고 id는 @GeneratedValue(strategy = GenerationType.SEQUENCE) 설정을 해뒀어.
ChatGPT
MySQL에서 테이블을 TRUNCATE 한 후에 새로운 데이터를 삽입하면, 새로운 데이터의 ID가 이전에 있었던 ID 다음 수가 들어가는 것은 MySQL의 자동 증가(Auto Increment) 기능 때문입니다. TRUNCATE 문은 테이블의 데이터를 삭제하고 테이블 스키마는 그대로 유지합니다. 따라서 테이블이 비워지더라도 Auto Increment 칼럼의 현재 값을 초기화하지 않습니다.

스프링에서 @GeneratedValue(strategy = GenerationType.SEQUENCE)를 사용하면, 일반적으로 시퀀스 생성기를 사용하여 ID 값을 생성합니다. 시퀀스 생성기는 테이블의 Auto Increment와는 별개로 ID 값을 생성하므로, 테이블을 TRUNCATE 하더라도 시퀀스 생성기는 영향을 받지 않고 이전에 사용된 ID 값 다음의 값을 생성합니다. 이것이 ID가 이전에 사용된 값 다음으로 증가하는 이유입니다.

즉, MySQL의 Auto Increment와 스프링의 시퀀스 생성기는 독립적으로 작동하며, 테이블을 TRUNCATE 하더라도 시퀀스 생성기는 계속해서 다음 ID 값을 생성합니다.

User
truncate 후 id가 1부터 들어가게 하려면 어떻게 해야 해?
ChatGPT
MySQL에서 TRUNCATE 후에 ID가 1부터 다시 시작하게 하려면 AUTO_INCREMENT 값을 재설정해야 합니다. 다음과 같은 단계로 수행할 수 있습니다:

테이블을 TRUNCATE하여 데이터를 삭제합니다.

AUTO_INCREMENT 값을 원하는 ID로 설정합니다. 이를 위해 다음의 SQL 문을 실행할 수 있습니다. 여기서 your_table_name은 해당 테이블의 이름이어야 합니다.

sql
Copy code
ALTER TABLE your_table_name AUTO_INCREMENT = 1;
위의 SQL 문을 실행하면 다음으로 삽입되는 레코드의 ID 값이 1부터 시작하게 됩니다.

위의 단계를 수행하면 테이블의 AUTO_INCREMENT 값이 초기화되어 다음으로 삽입되는 레코드의 ID가 1부터 시작합니다. 이제 테이블에 데이터를 추가하면 ID 값이 1부터 차례로 증가될 것입니다.

0개의 댓글