[MySQL] 자동 증가 코드

aseol·2023년 11월 24일
0

MySQL

목록 보기
18/18

로그인 로그 행이 인서트될 때마다 로그인 로그 코드 컬럼이 lg_in_0001, lg_in_0002 이런 식으로 자동으로 증가되게 하기

주요 사용 함수

  • SUBSTRING_INDEX
    문자열을 특정 구분자(delimiter)를 기준으로 나눈다. 특정 위치에서부터 지정된 구분자를 기준으로 앞(양수) 혹은 뒤(음수)의 부분 문자열을 반환
  • LPAD : 문자열을 지정된 길이만큼 왼쪽으로 패딩 (특정 문자로 채우기)
SUBSTRING_INDEX(l.login_log_code,'_',-1) -- 구분자 _ 뒤인 0001 0002 같은 숫자 반환
MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1)AS UNSIGNED))+1 -- 부호 없는 현재까지의 가장 큰 login log 코드를 찾아서 1 더한 것
-- 9999 이상인 경우 : 앞에 lg_in 붙이고 숫자 부분은 그냥 1을 증가시키기 

-- 9999 미만인 경우 : 앞에 lg_in 붙이고 자릿수 포맷 설정 
CONCAT('lg_in_', LPAD(MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1,4,'0')) -- 자리수 4자리로 맞추고 빈공간 0으로 채우기

전체 쿼리문 🔽

SELECT 
	(CASE
		WHEN COUNT(l.login_log_code) = 0 
        	THEN 'lg_in_0001'
		WHEN MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1)AS UNSIGNED))+1 > 9999 
        	THEN CONCAT('lg_in_', MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1) 
			ELSE CONCAT('lg_in_', LPAD(MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1,4,'0')) 
     END) AS loginLogCode
FROM 
	login_log AS l;

0개의 댓글