솔솔

[MySQL] MySQL 자동증가(방법2가지) 본문

나의보물들/MySQL

[MySQL] MySQL 자동증가(방법2가지)

솔솔하네 2022. 9. 27. 09:17

오라클 배울 때  PK에 중복방지를 위해 시퀀스를 사용해서 순차적으로 숫자가 증가 할 수 도록했는데

MySQL에서는 시퀀스라는게 없더라구요 ㅠㅠ 

비슷한 기능 'AUTO_INCREMENT'를 찾았지만 저는 시퀀스를 하려는 컬럼이 증가가 안되더라구요 ㅠㅠ

열심히 찾다찾다 왜그런지 아래에 정리해 보았습니다.

*참고로 저는 Toad for MySQL 툴 이용

 

AUTO_INCREMENT로 증가 시키기 (컬럼의 타입이 INT일 경우)


1. 테이블을 생성합니다.

    (보시면 컬럼'num'을 int타입으로 만들고 'AUTO_INCREMENT'적용 했습니다.)

CREATE TABLE `test`(
`num` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(10) NOT NULL
);

2. 아래쿼리를 차례차례 실행시켜봅니다.

INSERT INTO test(name) VALUES('민희');
INSERT INTO test(name) VALUES('영희');
INSERT INTO test(name) VALUES('민수');

이름이 민희 INSERT
이름이 영희 INSERT
이름이 민수 INSERT

3. 실행결과를 보면 'AUTO_INCREMENT'적용한 컬럼 'num'의 값이 자동으로 증가된걸 볼 수 있습니다.

 

 

값을 만들어서 증가시키기(컬럼의 타입이 VARCHAR인 경우)


1. 테이블을 생성합니다.

  (이번엔 컬럼'num'을 varchar타입으로 만들었습니다.)

CREATE TABLE `test`(
`num` varchar(10) NOT NULL PRIMARY KEY,
`name` varchar(10) NOT NULL
);

 

2. MAX()함수를 이용해 컬럼'num'에서 제일 큰 값에서 +1 해서 값을 만들어준다. 그리고 이 값을 이용해서 'num'컬럼에       INSERT해서 값이 순차적으로 올라가는거 처럼 한다.

(그런데 이 값을 어떻게 적용하냐라는 고민이 생길텐데 나는 MySQL에 변수선언 및 할당 할 수 있는 방법이 있기에 찾아서 적용함. 자세한건 'MySQL 변수' 검색해보시길)

select (IFNULL(MAX(num) + 1, 1)) from test
 // IFNULL()->처음 컬럼에 데이터를 넣을 때 아무런 값이 없기 때문에 처음의 값을 1로 리턴하기 위해 씀.
 // IFNULL(expr1, expr2) : expr1이 NULL이면 expr2를 리턴하고, NULL이 아니면 expr1을 리턴한다.

즉, 변수에 넣어서 할당하기 위해서 위에 쿼리를 @Num이라는 곳에 할당함.

SET @num =(select (IFNULL(MAX(num) + 1, 1)) from test);

 

3. 만든 변수를 INSERT할 때 사용하면 됨.

INSERT INTO test(num, name) values(@num, '민희');

 

4. 아래쿼리를 차례차례 실행시켜봅니다.

SET @num =(select (IFNULL(MAX(num) + 1, 1)) from test);
INSERT INTO test(num, name) values(@num, '민희');

SET @num =(select (IFNULL(MAX(num) + 1, 1)) from test);
INSERT INTO test(num, name) values(@num, '영희');

SET @num =(select (IFNULL(MAX(num) + 1, 1)) from test);
INSERT INTO test(num, name) values(@num, '민수');

 

 

이름이 민희 INSERT
이름이 영희 INSERT
이름이 민수INSERT

5. 실행 결과를 보면 컬럼'num'의 값이 차례차례 증가된 걸 볼 수 있습니다.