시퀀스도 테이블과 마찬가지로 변경과 삭제가 가능하다.

1. 변경

 시퀀스 정의 변경이란 시퀀스를 생성한 후에 증가치나 최소값, 최대값등을 수정할 때 사용한다.
시퀀스를 변경하는 방법은 ALTER를 사용하면 되는데 아주 간단하다. 시퀀스 변경의 몇가지 특징을 살펴보면

 ① 변경된 시퀀스 정의는 새로 생성되는 시퀀스 값부터 적용된다!
 ② START WITH절은 생성 직후의 시작 값을 의미하기 때문에, 변경이 불가능하다!

이 두가지만 기억하면 된다.

alter sequence s_seq
maxvalue 200;

변경하는 법은 생성할 때랑 거의 똑같다.
alter sequence 시퀀스명 써주고
maxvalue 200 변경하고 싶은 값을 재정의해주면 된다.

위와 같은 명령문은 s_seq라는 시퀀스의 최고값을 200으로 변경시킨다.
참 간단하지 않은가? ㅋ

2. 삭제 

 시퀀스를 삭제할 때는 DROP을 사용한다.

 drop sequence s_seq;

요렇게 하면 s_seq라는 시퀀스가 삭제된다.

참고로, 지금까지 쓴 create, alter, drop은 autocommit 속성을 가지고 있다.
이 말은 rollback으로 돌릴 수 없다는 얘기이고, 바로 데이터베이스, 디스크에 저장된다는 말이니 신중하게 쓰길 바란다.

p.s 오늘 수업 듣는데 느낀 것이..
앞으로 포스팅할 것들이 정말 무궁무진하고.. 내용은 점점 더 어려워질게 뻔하다! 엉엉 ㅠㅠ
그래도 포기하지 말고 열심히 하자. 화이팅! ㅋ

'SQL 언어 > 시퀀스(SEQUENCE)' 카테고리의 다른 글

SEQUENCE-① 생성, 조회  (0) 2012.03.08
Posted by Engineer135
,

SEQUENCE는 아주 중요하다!(적어도 내가 보기엔..-_-;)
왜냐하면!! 게시판에 글 번호를 매길때 바로 이 시퀀스를 사용하기 때문이다!

그렇다면 SEQUENCE란 무엇인가?
간단하게, 증가(감소)하는 일련번호를 생성하는 객체라고 보면 된다.
여러 테이블에서 공유가 가능하다고 한다(이 기능(?)은 아직 안 써봐서 모르겠지만.. 1씩 증가하는 시퀀스 하나만 만들어놓으면 여러 게시물 테이블이 이 시퀀스 하나를 공유해서 쓰면 된다는 말이겠지?).

일단 만들어야 쓰든가 말든가 하겠지?

1.SEQUENCE 생성

create sequence sequence
increment by 1
start with 1
maxvalue 100; 

create Sequence sequence //Sequence를 만드는데 이름은 sequence로 한다. 대소문자 구별 없다. 그냥 식별하려고 쓴거임.
increment by 1 //1씩 증가한다는 얘기다. -1이면 1씩 감소하겠지?
start with 1 //sequence의 시작 번호다. 기본값은 1이다.
maxvalue 100; //생성 가능한 시퀀스의 최대값이다.

이 외에도 nomaxvalue,numinvalue,cycle,chche등도 있는데 일단 패스하자. 아직 나도 잘 모르니까 -_-;

2.SEQUENCE 조회

어떤 시퀀스가 있는지 조회하고 싶을때 쓰는 명령문이다. 물론 이크립스의 SQL Explorer에 오른쪽 트리 보면 나오긴 한다.
select min_value, max_value, increment_by, last_number
from user_sequences
where sequence_name='sequence';
아까 만든 시퀀스가 조회될 거다. 마찬가지로 조건 안 쓰면 모든 시퀀스가 검색되니 조심하고. 별로 어렵지 않다.

3.CURRVAL 과 NEXTVAL 함수

얘네들도 아주 중요한 뽀인트 중에 하나다.

 sequence.currval
 sequence.nextval
사용법은 이렇다. 시퀀스이름.currval(혹은 nextval)이라고 입력하면 된다.

조회하고 싶을때는
 select sequence.currval
 from dual;
이렇게 쓰는데 dual은 가상의 테이블(?)이다. 일단 이렇게 알아두자;; 잘 모르겠다;;

CURRVAL은 마지막으로 리턴했던 일련번호를 리턴한다.
이게 뭔말이냐면.. 그냥 현재의 일련번호를 확인한다고 보면 된다.

NEXTVAL은 다음 번호를 생성하는 함수인데, 어떻게 작동하느냐하면
 ① 일련번호를 리턴한다.
 ② 일련번호를 증가(감소)치만큼 증가(감소)시킨다.
이런 식이다.

얘네 둘은 
 ① INSERT,UPDATE문에서 사용한다. 
 ② 서브쿼리,GROUP BY, HAVING, ORDER BY, DISTINCT와 함께 사용할 수 없다.
 ③ 컬럼의 기본값으로 사용할 수 없다.

'SQL 언어 > 시퀀스(SEQUENCE)' 카테고리의 다른 글

SEQUENCE-② 변경, 삭제  (0) 2012.03.12
Posted by Engineer135
,
지금까지 insert,update,delete로 행한 작업들은.. 아직 완전히 수행된 게 아니다!
왜냐하면 지금까지 한 작업들은 메모리에만 저장되어 있을 뿐, 하드디스크에 영구적으로 저장된 것이 아니기 때문이다.

예를 들어, DataBase에 Student 테이블이 저장되어있다.
사용자가 이 테이블에 insert,update,delete등을 수행하기 위해 DataBase에 접속한다고 치자.
그러면 DBMS(이건 뭐지?데이타베이스메니지먼트시스템인가?맞는 듯?)에 Student테이블의 복사본이 만들어지고,
사용자는 실질적으로 이 복사본에 삽입,수정,삭제를 하고 있는 것이다.
그러므로 이러는 동안엔 하드디스크에 저장된 DataBase의 Student테이블의 내용은 전~혀 변하지 않는다.
사용자가 작업한 내용은 오직 메모리에만 반영되고 있을 뿐이다.
그렇다면 이 내용을 하드디스크에 저장하려면 어떻게 하면 될까?

바로 COMMIT 명령어가 그 역할을 수행하는 거지!

그렇다면 ROLLBACK은 뭐?
COMMIT하기 전에는 삽입,수정,삭제한 내용이 메모리에만 저장되어 있다고 했는데,
ROLLBACK은 이렇게 메모리에 반영된 내용들을 지울때(혹은 되돌릴때?) 쓰는 명령어다.
영어를 봐라 roll back! 되돌아가다... 뭐 이런 어감이지 않은가?
메모리의 내용들을 되돌리는 것이기 때문에, COMMIT을 실행한 후(디스크에 변경 내용 저장됨)에는 소용이 없다. 
 
정리하면

COMMIT: 지금까지 작업한 내용을 영구적으로 디스크에 저장!
ROLLBACK: 변경된 작업 내용을 전부 취소!


'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

DELETE  (0) 2012.03.08
UPDATE  (0) 2012.03.08
INSERT-②  (0) 2012.03.08
데이터입력(INSERT)-①  (0) 2012.03.08
Posted by Engineer135
,