reallygeorge? 2020. 1. 29. 18:43
요약
 
sequence 정의 자동 번호 발생 기능 명령어
생성과 구조 create sequence 테이블명 옵션;
특징 연속된 번호 배정 안할수도 있다.
수정 alter sequence 테이블명 수정을 원하는 요소;
삭제 drop sequence 테이블명;
 
 
sequence란?
자동 번호 발생 기능이 있는 명령어이다.
 
*sequence도 object의 일종인데
object는 공통적인 명령어로
create 생성종류 이름을 사용한다 .
 
--------------------------------------------------------------------------------------------------------------------------------------
sequence의 생성과 구조?
create sequence 테이블명 옵션
 
create sequence dept_deptno1
start with 2 <-2부터 시작
increment by 1 <-1씩 증가
minvalue 2 <-최소값
maxvalue 100 <-최대값
nocycle <-순환 없음(번호를 재활용 하지 마라)
nocache <-미리 생성 x
 
 
*cache란?
한번 실행할 때 여러개를 미리 만들어서 하나씩 가져다 쓰는것을 말한다.
기본 값은 20이며 nocache는 실행할 때마다 하나씩 만드는 것을 말한다.
 
*cycle이 되는 경우
 
NEXTVAL EMPNO
--------- ----------
100 7369
1 7499
2 7521
3 7566
4 7654
5 7698
6 7788
7 7844
8 7876
9 7900
10 7902
 
 
 
 
 
사용처
99.9%로 application에 사용하며 insert문으로 사용한다.
 
ex)
 
create sequence dept_deptno1
start with 2
increment by 1
minvalue 2
maxvalue 100
nocycle
nocache
 
insert into dept
values (dept_deptno1.nextval ,'연구','서울') <-nextval이란 다음 번호 뽑으라.
 
 
 
 
DEPTNO DNAME LOC
---------- -------------- -------------
1 a b
2 연구 서울
10 accounting NEW YORK
20 research DALLAS
30 sales CHICAGO
40 operations BOSTON
 
 
 
insert into dept
values (dept_deptno1.nextval ,'연구','서울') <-3번으로 자동으로 입력된다.
pk column value
 
DEPTNO DNAME LOC
---------- -------------- -------------
1 a b
2 연구 서울
3 연구 서울
10 accounting NEW YORK
20 research DALLAS
30 sales CHICAGO
40 operations BOSTON
 
-----------------------------------------------------------------------------------------------------------------------------------
sequence의 실제 활용사례
 
 
db로부터 데이터를 끌어와서 표면적으로 나타나게 변환.
 
게시물의 구성?
게시물 번호, id 날짜 좋아요,싫어요 내용 status(보존 삭제 등등)
 
 
*관계형 데이터 베이스 =>1개의 테이블엔 반드시 1개의 pk가 존재한다. (sequence활용과 연관)
 
 
ex)게시물의 도배 댓글 지우기
 
delete 게시물
where 내용 like '%간접세%' <- like를 써야 비슷한 패턴을 지울 수가 있다. =를쓰면 완전 똑같은것만 지우니까
and id = <- 간접세까지만 넣으면 간접세가 들어있는 댓글들은 전부지우게 된다.
and 날짜=
where 게시물 번호 = <- 게시물 번호를 지정하면 원하는 것을 특정하게 지우기 용이하다.
 
 
=>게시물 번호는 이용자가 지정하는것이 아니고 관리자가 주어야 하는데 일일이 줄수는 없으니 자동으로 주도록 sequence를 이용한다.
(primary key값을 주기 위함)
 
 
---------------------------------------------------------------------------------------------------------------------------------
sequence는 하나의 테이블에 여러개를 적용할 수도 있다.
insert into emp(empno, ename, sal , deptno)
values(dept_deptno.nextval,'aa',3000,10)
---------------------------------------------------------------------------------------------------------------------------------
sequence의 특징 : 자동 번호 발생기
공유가능한 객체
응용프로그램에서 DB로 데이터 INSERT할 때
PK컬럼의 VALUE 값 지정시 사용
항상 연속된 번호를 부여하지는 않음.
 
왜 무조건 연속된 번호를 부여하지는 않을까?
1.DML이다 보니 ROLLBACK하는경우
2.테이블 여러개를 번갈아가며 쓰는 경우(=동일한 SEQUENCE 같이 사용)
---------------------------------------------------------------------------------------------------------------------------------
sequence 수정?
SEQUENCE의 정보는 ALTER로 바꿀 수 있다.
alter sequence 테이블명
수정을 원하는 것
ALTER SEQUENCE DEPT_DEPTNO
CYCLE;
 
SELECT DEPT_DEPTNO.NEXTVAL,EMPNO
FROM EMP;
---------------------------------------------------------------------------------------------------------------------------------
sequence 삭제
SEQUNECE의 정보는 DROP으로 삭제할 수 있다.
drop sequence 테이블명
DROP
 
 
DROP SEQUENCE DEPT_DEPTNO;
 
 
(단, SEQUENCE를 삭제해도 SEQUENCE를 통해 작업한 내용들은 지워지지 않는다.)