[23일차] Oracle - 데이터베이스 객체

SOSO·2022년 5월 18일

학원

목록 보기
22/59
post-thumbnail

데이터베이스 객체

뷰 : 논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냄
시퀀스 : 숫자 값 생성기
인덱스 : 질의의 성능을 향상
동의어 : 객체에 다른 이름을 제공

테이블 : 데이터의 저장 단위
레코드 -> 데이터가 저장되는 행
컬럼 -> 데이터를 구별하는 속성

데이터 딕셔너리

  • 사용자가 소유한 테이블의 이름
SELECT table_name FROM user_tables;
  • 사용자가 소유한 개별 객체 유형
SELECT DISTINCT object_type FROM user_objects;
  • 사용자가 소유한 테이블,뷰,동의어 및 시퀀스
SELECT * FROM user_catalog;

테이블 생성

테이블 : 기본 저장 단위로 행과 열로 구성

CREATE TABLE employee(
 empno number(6),
 name varchar2(30) not null,
 salary number(8,2),
 hire_date date default SYSDATE,
 constraint employee_pk primary key (empno)
);
  • 컬럼의 구조에 대한 상세정보를 조회
describe employee;

desc employee;

테이블의 관리

add 연산자

테이블에 새로운 컬럼을 추가

ALTER TABLE employee ADD (addr varchar2(60));

제약 조건 추가

ALTER TABLE employee ADD CONSTRAINT employee_pk 
primary key (empno);

modify 연산자

테이블의 컬럼을 수정하거나 not null 컬럼으로 변경할 수 있음

ALTER TABLE employee MODIFY (salary number(10,2) not null);

drop 연산자

컬럼의 삭제

ALTER TABLE employee DROP COLUMN name;

컬럼명 변경

ALTER TABLE employee RENAME COLUMN salary TO sal;

테이블명 변경

RENAME employee TO employee2;

테이블의 삭제

DROP TABLE employee2;

ON DELETE CASCADE

ON DELETE CASCADE 옵션을 사용하면 부모 테이터를 삭제하면
자식 테이터가 있을 경우 자식 테이터까지 모두 삭제함

ON DELETE SET NULL

부모 데이터를 삭제시 자식 데이터가 있으면 null로 처리

뷰

논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냄

뷰의 사용 목적

  • 데이터 액세스를 제한하기 위해
  • 복잡한 질의를 쉽게 작성하기 위해
  • 데이터 독립성을 제공하기 위해
  • 동일한 데이터로부터 다양한 결과를 얻기 위해

VIEW 생성

CREATE OR REPLACE VIEW emp10_view
as SELECT empno id_number, ename name, sal*12 ann_salary
   FROM emp
   WHERE deptno=10;

   
SELECT * FROM emp10_view;

view의 구조 확인

desc emp_info_view;

view를 통한 데이터 변경하기

일반적으로 view는 조회용으로 많이 사용되지만 아래와 같이 데이터를
변경할 수 있음

UPDATE emp10_view SET name='SCOTT' WHERE id_number=7839;
SELECT * FROM emp10_view;
SELECT * FROM emp;

가상열(ann_salary)의 데이터는 변경할 수 없기 때문에 오류 발생

with read only

읽기 전용 뷰를 생성하는 옵션

CREATE OR REPLACE VIEW emp20_view as
SELECT empno id_number, ename name, sal*12 ann_salary
FROM emp
WHERE deptno=20
WITH READ ONLY;

읽기 전용 뷰이기 때문에 데이터 변경 불가능

UPDATE emp20_view SET name='DAVID' WHERE id_number=7902;

view의 삭제

DROP VIEW emp10_view;

sequence

유일한 값을 생성해주는 오라클 객체
시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있음.
보통 primary key 값을 생성하기 위해 사용

시작 값이 1이고 1씩 증가하고, 최대값 100000이 되는 시퀀스 생성

CREATE SEQUENCE test_seq
start with 1
increment by 1
maxvalue 100000;

currval : 현재 값을 반환
nextval : 현재 시퀀스 값의 다음 값 반환

주의 sequence를 생성한 후 바로 currval를 호출하면 초기 값이 생성되지
않아서 아래와 같은 오류 발생
[시퀀스 TEST_SEQ.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다]

SELECT test_seq.nextval FROM dual;

시퀀스의 수정

ALTER SEQUENCE sequence_name
increment by n
maxvalue n|nomaxvalue
minvalue n|nominvalue
cycle|nocycle

start with는 수정할 수 없음

시퀀스 삭제

DROP SEQUENCE sequence_name;

인덱스(index)

원하는 정보의 위치를 빠르고, 정확하고, 지능적으로
알아낼 수 있는 방법을 제공

Unique index

테이블의 컬럼에 제약 조건을 설정할 때 Primary key,
unique 로 설정하면 Oracle은 자동으로 이 컬럼에
Unique index 설정 데이터 값이 중복됨이 없이 유일한 값을 가지는 컬럼에 인덱스를 설정했을 때 이를 unique index라 함

인덱스 만들기

  • 자동
    테이블 정의에 Primary key 또는 unique 제약 조건을 정의하면 고유 인데그가 자동으로 생성

  • 수동

    • 유일한 값을 가지는 컬럼에 인덱스 설정 (unique index)
    CREATE UNIQUE INDEX dname_idx ON dept (dname);
    • 유일한 값을 가지지 않는 컬럼에 인덱스 설정
      (non unique index)
    CREATE INDEX emp_ename_idx ON emp (ename);

동의어

객체의 다른 이름을 생성하여 객체 액세스를 단순화

  • 다른 사용자가 소유한 테이블을 쉽게 참조
  • 긴 객체 이름을 짧게 만든다

동의어 생성

CREATE SYNONYM emp20 FOR emp20_view;
SELECT * FROM emp20;

동의어 삭제

DROP SYNONYM emp20;
profile
성장과 도전을 기록합니다

0개의 댓글