mysql) 자동증가 상품코드 만들기

북마크 추가

코드 + 숫자를 자동으로 증가 시켜  PROD-00001 과 같은 형태의 자동으로 증가하는 PK를 입력하려고 한다

 

이를 위해 LPAD 함수를 사용한다.

 

SELECT LPAD(COUNT(*)+1,5,'0') FROM PRODUCT

 

상품테이블 데이터 row수를 카운트 한 후 앞에 0000을 붙인다

 

00001이 출력된다.

 

그 다음 CONCAT함수를 이용해 앞에 문자열을 붙여준다

 

CONCAT('PROD','-',(SELECT LPAD(COUNT(*)+1,5,'0') FROM PRODUCT))

 

이제 PROD-00001이 출력된다.

 

이제 만든 상품코드를 PRODUCT 테이블에 넣어줘야 한다.

 

INSERT INTO PRODUCT (PROD_SEQ) VALUES (CONCAT('PROD','-',(SELECT LPAD(COUNT(*)+1,5,'0') FROM PRODUCT)))

 

-> 위와 같이 INSERT를 하게 되면 sub query error가 발생한다.

오류 코드: 1093
You can't specify target table 'PRODUCT' for update in FROM clause

 

따라서 SELECT를 사용하여 INSERT 하면 오류가 나지 않는다.

 

INSERT INTO PRODUCT (PROD_SEQ) SELECT CONCAT('PROD', '-', (SELECT LPAD(COUNT(*)+1,5,'0') FROM PRODUCT ))

 

상품코드의 숫자 길이를 5로 잡는다면 00001 ~ 99999 까지 입력이 가능하지만 그 이상 데이터가 들어갈경우 에러가 발생하니 상품이 많다면 여유있게 잡아줘야한다.

 

결과

 


 

HKH
2015-09-09 11:54
SHARE
댓글

상품코드 같은경우 pk로 잡힌다면 다른 테이블과 엮에 있는게 많을 것으로 보이는데 
실제로 db에서 삭제보다는 사용여부 컬럼을 하나 만들어서 사용하는게 좋을것 같습니다.
HKH

좋은 정보 감사합니다.

중간에 상품을 삭제할 경우
전체 row를 count 하여 번호를 생성할 경우 중복된 번호가 있지 않을까요?
장현정
keyboard_arrow_left
keyboard_arrow_up