본문 바로가기
Database/MySQL

[MySQL] Auto increment 사용법

by Youngs_ 2022. 9. 28.

스키마를 작성하다보면 데이터의 수를 p.k로 설정해야 할때가 있다.
이럴경우 새로 데이터를 insert할때마다 max(num)으로 기존에 추가되어있는 num의 최대값을 알아야 p.k값이 겹치지 않게 추가를 할 수있다. 하지만 insert마다 이렇게 num의 최대값을 받아오는 sql문을 작성하는것은 비효율적이므로 num에 Auto_Increment 속성으로 insert문을 보낼때 마다 자동으로 num값이 증가되게 저장할 수 있다.

Alter Table화면에서 AI를 클릭해서 auto increment 옵션을 줄수도있다.



Auto_Increment 속성은 table을 생성할때 옵션으로 줄수 있다.
CREATE TABLE 'test'(
'num' int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
'name' varchar(10) NOR NULL
);


이제 데이터를 insert해보자 num값은 자동으로 증가 되므로 name값만 입력해주면 된다.
insert into test(name) values('a');
insert into test(name) values('b');
insert into test(name) values('c');

- 자동으로 값이 잘 들어갔다.

※이미 생성한 테이블 칼럼에 자동증가 옵션을 추가하고 싶을 때
ALTER TABEL 'TEST' MODIFY 'num' INT NOT NULL AUTO_INCREMENT;
※자동 속성값을 특정값으로 초기화 할때
ALTER TABLE test AUTO_INCREMENT=1;  //auto_increment값을 1로 초기화 한다.
※스토리지 엔진별 데이터를 지웠을시 auto_increment값 변화
auto_increment 속성은 1부터 시작하여 값을 계속 증가 시키므로 값이 중복될 일은 없다. 만약 1부터100까지의 데이터가 들어가 있을때 50~100까지 삭제하였다고 하면 새로 insert했을때 num값은 51이 아닌 101이다.
하지만 만약 mysql을 재시작한다면 스토리지 별로 auto_increment값은 차이가 난다. 파일 기반 스토리지 엔진인 MyISAM의 경우 auto_increment값은 그대로 101이다. auto_increment값을 파일에 일일이 기록해놓기때문이다. 그러나 메모리 기반 스토리지 엔진인 Inno DB는 auto_increment값이 101이 아닌 51이 된다. mysql을 처음 시작할때 마다 메모리상에 SELECT MAX(num) FROM test for UPDATE로 auto_increment값을 새로 저장하기 때문이다. 물론 num값을 참조하는 키값들의 종속성을 잘 설정해두면 문제될 것은 없지만 InnoDB에서 Auto_Increment를 사용할 경우 이와같은 특성을 이해하고 사용하는 것이 예기치 않은 장애사항을 예방하는 방법이다.

참고 사이트=http://gywn.net/2013/02/mysql-innodb-auto-increment/

'Database > MySQL' 카테고리의 다른 글

[MySQL] Autocommit & Rollback  (0) 2023.01.09
[MySQL] 암호화해서 저장하는법  (0) 2022.07.28
[MySQL] AutoCommit 해제  (0) 2022.07.02
[MySQL] 시퀀스 사용법  (0) 2022.06.27
[MySQL] 설치  (0) 2022.06.24

댓글