ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SEQUENCE
    Oracle-diary/DB객체 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를 통해 작업한 내용들은 지워지지 않는다.)

    'Oracle-diary > DB객체' 카테고리의 다른 글

    VIEW  (0) 2020.01.29
    SYNONYM  (0) 2020.01.29
    INDEX  (0) 2020.01.29

    댓글

Designed by Tistory.