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 까지 입력이 가능하지만 그 이상 데이터가 들어갈경우 에러가 발생하니 상품이 많다면 여유있게 잡아줘야한다.

 

결과

 


 

AD
관리자
2015-09-09 11:54
SHARE
댓글

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

좋은 정보 감사합니다.

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