솔솔
[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'의 값이 차례차례 증가된 걸 볼 수 있습니다.
'나의보물들 > MySQL' 카테고리의 다른 글
[MySQL] MySQL 데이터 값 대소문자 구별 문제 해결하기 (0) | 2024.07.19 |
---|---|
[MySQL] LPAD, RPAD로 자릿수 채우기 (0) | 2022.09.27 |
[MySQL]양방향 암호화 복호화 (0) | 2022.09.26 |