Sequence 객체
: 자동적으로 번호를 맺어주는 객체
특별히 설정되는 PK가 없거나 의미 있게 만들지 않아도 되는 경우와 자동으로 순서적인 번호가 필요한 경우 사용한다.
테이블과 독립적이며 여러 곳에서 사용이 가능하다.
ex) 채팅 등
- 사용 방법
-- 생성(create), 수정(alter)
(create, alter) sequence 시퀀스명
increment by 증감값
minvalue 최소값
maxvalue 최대값
cycle; -- 순환 가능 여부
-- 삭제
drop sequence 시퀀스명;
-- 번호 증가 후 그 다음 번호부터 데이터가 삽입된다.
-- 다음 번호 증가
-- 시퀀스명.nextval : 시퀀스 객체의 다음 값(Next Value) 리턴
select 시퀀스명.nextval from 테이블명;
-- 현재 번호 조회
-- 시퀀스명.currval : 시퀀스 객체의 현재 값(Current Value) 리턴
select 시퀀스명.currval from 테이블명;
- 시퀀스 사용 전
-- 상품 분류테이블에 'P103', 'USB 제품'을 등록하시오?
-- (단, lprod_id 컬럼의 값은 최대값을 구하여 1을 더한 서브쿼리를 작성하여 입력한다.)
select nvl(max(lprod_id), 0) from lprod;
insert into lprod(lprod_id, lprod_gu, lprod_nm)
values ((select nvl(max(lprod_id), 0)+1 from lprod), 'P103', 'USB제품');
select * from lprod;
시퀀스명.nextval : 시퀀스 객체의 다음 값(Next Value) 리턴
시퀀스명.currval : 시퀀스 객체의 현재 값(Current Value) 리턴
- 시퀀스 사용 후
-- lprod_seq 시퀀스 생성 : 초기값이 15이며 1씩 증가
create sequence lprod_seq
increment by 1 start with 15;
-- 상품 분류테이블에 'P203' , '아동복' 을 등록하시오?
insert into lprod(lprod_id, lprod_gu, lprod_nm)
values(lprod_seq.nextval, 'P203', '아동복');
select * from lprod;
-- sequence 변경
-- 최대 50까지 2씩 증가
alter sequence lprod_seq
increment by 2
maxvalue 50
cycle;
-- cycle을 추가 시 처음으로 돌아감
select lprod_seq.nextval from dual;
select lprod_seq.currval from dual;
-- sequence 제거 (*rollback 되지 않음)
drop sequence lprod_seq;
-- 다음 요건을 만족하는 시퀀스를 생성하시오? (P.221 참고)
-- 객체명 : cart_seq, 증감값 : 1, 최소값 : 10000, 최대값 : 99999, 순환가능
create sequence cart_seq
increment by 1
minvalue 10000
maxvalue 99999
cycle;
select cart_seq.nextval from dual;
Synonym 객체
= 동의어, 별칭
: 객체에 대한 다른 이름으로 대체한다.
긴 이름의 객체명을 쉬운 이름으로 대체할 때 사용한다.
객체를 생성할 때 insufficient privileges 오류가 뜰 시 권한을 줘야함.
아래의 링크를 참조하여 권한을 주면 된다.
https://forest-of-coding.tistory.com/6
[Database] 1.5장 Oracle user 접속 및 사용권한 부여
Oracle SQL Developer 사용 전 설정할 것 1. Win키 + R 를 누를 시 아래와 같은 실행창을 띄운다. 2. 실행창에 cmd를 입력한다. sqlplus sys/java@localhost:1521 as sysdba 3. 위의 코드를 입력하여 Oracle DB에 접속한다. 4
forest-of-coding.tistory.com
- 사용 방법
-- 생성
create synonym 별칭
for 테이블명;
-- 삭제
drop synonym 별칭;
-- synonym 객체 생성
-- insufficient privileges 오류가 뜰 시 권한을 줘야함.
create synonym mem
for member;
-- 두 select 문의 결과는 동일하다.
select * from mem;
select * from member;
-- 삭제
drop synonym mem;
drop synonym mydual;
ex)
-- mydual 생성
create synonym mydual for sys.dual;
select 'Hello World' from mydual;
select sysdate from mydual;
-- 삭제
drop synonym mydual;
Index 객체
: DB Server의 성능을 가장 많이 좌우하게 되는 요소 중 하나로, 특정 데이터를 빨리 찾기 위해 사용한다.
기본적으로 PK 키와 FK 키를 생성할 때 사용된다.
인덱스를 만드는 데 많은 저장 공간과 시간이 소요되기에 사용 시 주의해야 한다.
index는 수정할 수 없기에 수정을 원할 시 삭제하고 다시 생성해야 한다.
- 사용 방법
-- index는 수정할 수 없기에 수정을 원할 시 삭제하고 다시 생성해야 한다.
-- 생성
create index 별칭
on 테이블명(컬럼명);
-- 삭제
drop index 별칭;
-- 재생성 : 삭제 후 사용 불가 -> 생성 한 뒤 사용해야함.
alter index 별칭 rebuild;
-- index 객체
-- 회원 생일이 조건절에 자주 사용되어 index를 생성
create index idx_member_bir
on member(mem_bir);
select mem_id, mem_name, mem_job, mem_bir
from member where to_char(mem_bir, 'YYYY') = '1998';
-- 회원생일에서 년도만 분리하여 인덱스를 생성(Function-based Index)
create index idx_member_bir_year
on member(to_char(mem_bir, 'YYYY'));
drop index idx_member_bir;
drop index idx_member_bir_year;
-- index 재생성 : 삭제 후 사용 불가 -> 생성 한 뒤 사용해야함.
alter index idx_member_bir rebuild;
- 추천 사용 방법
-- index 객체
-- 바로 하단의 방식보단 재구성의 방식으로 하는 것을 권유한다.
-- 아래의 코드 결과 값은 같다.
select cart_no, cart_prod, cart_qty from cart where substr(cart_no, 1, 8) = '20200405';
-- 재구성
select cart_no, cart_prod, cart_qty from cart where cart_no like '20200405%';
-- 또는
select cart_no, cart_prod, cart_qty from cart
where cart_no > '2020040500000'
and cart_no < '2020040599999';
Data Dictionary
: DataBase를 위해 Meta 정보를 관리한다.
-- all_objects의 모든 컬럼 상세
desc all_objects;
select table_name, comments from dictionary
where table_name like 'ALL_%';
select object_name, object_type, created
from all_objects
where owner = 'PC10'
order by object_type asc;
-- USER_TABLES의 컬럼 상세를 확인하고 각 테이블 전체 레코드 개수를 출력.
-- (테이블명, 레코드 수)
desc user_tables;
select table_name, rownum
from user_tables;
-- USER_CONSTRAINTS, USER_CONS_COLUMNS의 컬럼 상세를 확인하고 상품 테이블의 제약조건을 출력하시오?
-- (컬럼명, 제약명, 타입, 제약내용)
desc user_constraints;
desc user_cons_columns;
select * from all_constraints
where table_name='PROD';
'데이터베이스' 카테고리의 다른 글
[Database] 20장 PL/SQL 2 (0) | 2024.01.05 |
---|---|
[Database] 19장 PL/SQL 1 (2) | 2024.01.03 |
[Database] 17장 연습문제5 (0) | 2023.12.29 |
[Database] 16장 다른 Table로부터 데이터 입력, 테이블 복사 (0) | 2023.12.28 |
[Database] 15장 서브쿼리 (0) | 2023.12.28 |