[MySQL] MySQL 자동증가(방법2가지)
오라클 배울 때 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('민수');



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, '민수');



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