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

SOSO·2022년 5월 18일
0

학원

목록 보기
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개의 댓글