INSERT INTO EXAM(STUDENT_CODE, STUDENT_NAME, EXAM_SUBJECT, SUBJECT_NO1, SUBJECT_NO2, SUBJECT_NO3, SUBJECT_NO4, SUBJECT_NO5, EXAM_DATE,REGIST DATE)
VALUES('A0013212', '홍길동', '정보처리기사', 45, 50, 70, 80, 100, '2020-10-30', sysdate)
COMMIT;
이전[DB#14]에서 사용했던 식이다. 몇 개만 생성했지만,
수 천명이 본 시험이 있다고 가정할 때,
같은 데이터가 있다면 어떻게 처리할 것인가에 대해 고민할 필요가 있다.
그럴때 시퀀스를 쓴다.
시퀀스를 이용하려면 똑같은 데이터가 있어야한다.
똑같은 데이터가 있을 때,
이름이 같다고 해서 추가하지 말아야하는가?
점수가 같으면 같은 데이터인가? 이름과 점수가 같으면 데이터를 추가하지 말아야하는가
---------------------------------------------------------------------------------------------------
이럴땐 구분할 수 있는 항목을 추가하는 것이다. 이것은 절대 중복이 불가하니까 괜찮다.
---------------------------------------------------------------------------------------------------
여기서 시퀀스란? -> 번호를 자동으로 부여하기 위한 도구이다.
create sequence 이름 [ 옵션 ]; 으로 명령할 수 있다.
우선 아무런 옵션이 없는 시퀀스를 생성한다면 위 명령식에서 옵션을 추가하지 않으면 된다.
create sequence test_seq; -> 테스트_시퀀스 를 만들어본다는 식이다.
sequence test_seq가 생성되었다고 작업이 완료되었다며 결과창에 나온다.
두 번째로, 번호만 있는 테이블을 설정하여
create table test(no number);
insert into test(no) values(1); -> 번호를 직접 부여한 경우다 하지만 시퀀스를 쓰면
insert into test(no) values(test_seq.nextval); 라고 하면 번호를 시퀀스를 통해서 부여하게 된다.
select * from test; 조회해보면 출력창에 계속해서 번호표를 부여할 수 있는 것을 알게된다.
시퀀스 옵션은 기본값, 마지막값, 증가폭과 같은 것을 설정할 수 있다.
(min value, max value, increment, start value, cycle, order, cache 등)
MIN은 최소몇부터
MAX는 최대몇까지
INCREMENT BY 는 증가폭
START WITH 는 몇부터 시작할지
CYCLE은 순환(반복)1~5까지라면 123451234512345 이런것이다.
NOCYCLE은 순환X
ORDER는 우선순위를 사용하는것이고
NOORDER는 우선순위X
CACHE는 캐시설정 (기본적으로 20의 캐시(여유)를 가진다)
NOCACHE는 여유,여분X
CACHE 경우에는, CREATE SEQUENCE TEST2_SEQ CACHE 20;
예를 들어 번호표를 미리 뽑아놓는 것
은행에서 청원경찰이나 번호표 도와주시는 분이 어떤일로 오셨냐며 미리 뽑아놓고 그에 맞는 번호표를 주는
경우를 상상해보는 것과 같다.
따라서 CACHE로하면 처음 시작은 CACHE나 NOCACHE나 시작은 1이고 두번째부턴 CACHE는 21 NOCACHE는 2이다.
20을 여분으로 따로 두고 뽑는 것이라고 보면 된다.
따라서 두번째 뽑으면 21과 2여도 나오는건 1,2 둘다 똑같다.
다만 CACHE는 20장을 뽑아놓고 눌러도 안나오는 개념이다.
여유분에서 순번표를 빼오는 것이다.
다음으로 테이블 데이터를 자르는 DDL의 한 종류가 있는데
데이터를 지우는것이 아니라 테이블을 제목만 빼고 초기화 시키는 것이다.
truncate table test;
시퀀스의 초기값을 지정하여 생성한다고 생각하고 (1001부터 생성) 만든다면
create sequence test2_seq start with 1001;
이라고 하면 시퀀스가 생성되고
insert into test(no) values(test2_seq.nextval); 생성하면 1001부터 생성된다.
마지막으로 조금 정리해보자면,
시퀀스 생성 : create sequence 이름 [옵션];
시퀀스 조회 : select * from user_sequence;
시퀀스 변경 : alter sequence 이름 [옵션];
시퀀스 삭제 : drop sequence 이름;
번호 발급 : 이름.nextval
이러하다.
'Database SQL > Oracle' 카테고리의 다른 글
[DB#17] 정렬(SELECT) 데이터를 정렬해보자!(ASC, DESC) (0) | 2020.11.26 |
---|---|
[DB#16] 조회(SELECT) (0) | 2020.11.25 |
[DB#14] DB기본 연습문제(데이터 입력) (0) | 2020.11.25 |
[DB#13] 데이터 베이스(DB)와 데이터베이스 관리시스템(DBMS), DDL, DML, DCL(TCL) (0) | 2020.11.25 |
[DB#12]커밋, 롤백, 데이터 추가하기 (0) | 2020.11.24 |