오늘은 구현하던 기능 중 특정 컬럼의 값을 자동으로 증가시켜주는 기능이 필요했던 내용을 찾아보았다. 그 내용이 바로 시퀀스라는 개념이였고, 업무를 진행하면서 알게 된 내용과 찾아본 내용을 정리해서 작성해보려고 한다.
create : CREATE SEQUENCE <seq_name>
nextval: nextval('seq_name')
currval: currval('seq_name')
setval: setval('seq_name', seq_val, [true/false])
drop: DROP SEQUENCE seq_name
시퀀스 구문에는 위와 같은 5가지 종류가 있다. 아래에서 직접 사용을 하면서 어떠한 내용인지 확인해보자.
CREATE SEQUENCE seq_name; DROP SEQUENCE seq_name;
CREATE를 통한 시퀀스의 생성을 진행하고, DROP을 통해 시퀀스의 삭제를 진행할 수 있다.
SELECT currval('seq_name'); SELECT nextval('seq_name');
currval을 통한 현재 시퀀스의 값을 확인할 수 있고, nextval을 통해 현재 값에서 +1의 값을 증가하게 할 수 있다.
많은 블로그에서 에러가 나는 경우 nextval을 진행하면 해결이 된다고 표현을 했는데 그 이유는 현재 시퀀스에 아무런 값도 정의되지 않았을 때 해당 에러가 발생한다고 보면 된다.
SELECT setval('seq_name', 1, true); -- 결과값 = 2 SELECT setval('seq_name', 1, false); -- 결과값 = 1
setval() 함수를 통하여 해당 시퀀스를 초기화 준다. true/false의 역할은 다음과 같다.
- true - 초기화 후 nextval을 사용할 때 초기화 된 값(1)에서 +1을 하여 사용된다.
- false - 초기화 후 nextval을 사용할 때 초기화 된 값(1)을 그대로 사용한다.
db데이터가 총 5개의 컬럼이 이루어져있고, COLUMN0이 만약 해당 테이블의 시퀀스라면 아래 insert문에서 해당 컬럼을 제외하고 데이터를 삽입한다.
INSERT INTO TABLE_NAME ( COLUMN1, COLUMN2, COLUMN3, COLUMN4 ) VALUES ( VALUE1, VALUE2, VALUE3, VALUE4 );
그러면 해당 컬럼에는 아무런 값도 주지 않았지만 실제로 COLUMN0에는 지정해준 시퀀스의 +1 값을 통해 자동으로 VALUE0을 갖게 된다.
스크린샷도 없이 왜 이렇게 말로 설명하냐 하면 사실 지금 DB툴을 열어서 글을 쓸 수 있는 환경이 아니라 부족한 설명을 진행했다. 블로그에 앞으로도 신경을 좀 많이 써야하는데 업무도 바쁘고 요새 내가 좀 풀어짐을 느낀다 ㅠ 담주부터는 그래도 여유가 좀 생기니 앞으로도 애정을 갖고 글을 써보도록 하겠다.