요약 |
|
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를 통해 작업한 내용들은 지워지지 않는다.) |