KDT/DB

240306 DB - 데이터정의어(DDL) - View, Sequence 1

001cloudid 2024. 3. 6. 12:50
728x90

Object 유형

  1. Table
  2. View
  3. Sequence
  4. Index
  5. Synonym

1. Table

정의방법 : create table, alter table, drop table, truncate table

사용방법 : select, insert, update, delete

 

2. View

하나 이상의 Base table을 기반으로 생성, 물리적으로 존재하지 않고

Data Dictionary에 Select 구문 형태로 정의만 되어 있는 가상의 논리적인 테이블.

보안성, 공간효율성, 편의성

 

정의방법 : create view [or replace] view. or replace로 수정작업, drop view

사용방법 : select, insert, update, delete

-- create table과 비슷
create [or replace] [force|noforce] view 뷰명 [alias]
as subquery;

-- [or replace] : 생성 또는 교체. 뷰명이 없으면 생성, 있으면 교체(오라클에서는 alter view가 존재 하지 않음)
-- [force] : base table 존재와 상관없이 view가 생성, DML 불가, 사용할 일 없음 | [noforce] : base table 존재하는 경우에만 view가 생성(기본값)
-- [alias] : view에서 사용할 컬럼명 별칭

-- 
create view empvu80
as select employee_id, last_name, salary
	from employees
    where department_id = 80;
desc empvu80;
select * from empvu80;

--
create view salvu50
as select employee_id id_number, last_name name, salary*12 ann_salary
	from employees
    where department_id = 50;
desc salvu50;
select * from salvu50;
-- ==
create view salvu50(id_number, name, ann_salary)
as select employee_id, last_name, salary*12
	from employees
    where department_id = 50;

--
create or replace view empvu80(id_number, name, sal, department_id)
as select employee_id, first_name||' '||last_name, salary, department_id
	from employees
    where department_id = 80;
desc empvu80;
select * from empvu80;

--
create or replace view dept_sum_vu(name, minsal, maxsal, avgsal)
as select d.department_name, min(e.salary), max(e.salary), avg(e.salary)
	from employees e join departments d
    on (e.department_id = d.deaprtment_id)
    group by d.department_id;
desc dept_sum_vu;
select * from dept_sum_vu;

 

3. Sequence

자동으로 고유한 번호를 반환해주는 번호 생성기와 같은 Object(Mysql auto-increment)

정의방법 : create sequence, alter sequence, drop sequence

사용방법 : 시퀀스명.nextval, 시퀀스명.currval

create sequence 시퀀스명
[increment by n] -- 시퀀스 번호 사이 간격(default = 1). 음수도 가능
[start with n] -- 시퀀스 번호의 시작값(default = 1)
[{maxvalue n | nomaxvalue}] -- 시퀀스 최대값(default = nomaxvalue 10^27)
[{minvalue n | nominvalue}] -- 시퀀스 최소값(default = nominvalue -10^26)
[{cycle | nocycle}] -- 시퀀스 번호 순환 여부(default = nocyle)
[{cache n | nocache}]; -- 시퀀스 번호 저장 여부(default cache20)

--
create sequence test; -- 기본값으로 적용된 시퀀스가 생성

--
create sequence dept_id_seq
increment by 10
start with 340
maxvalue 1000
nocycle;

--
insert into departments
values(dept_id_seq.nextval, 'AAA', 109, 1700);

insert into departments
values(dept_id_seq.nextval, 'BBB', null, null);

select * from departments;

commit;

 

위의 상황에서 insert 작업을 한 후 롤백을 하면 DML은 취소되지만 시퀀스는 취소되지 않음 gap이 발생함

따라서 수동으로 스퀀스만큼 넣어줘야함

※gap발생이 일어나는 것을 인지하고 있어야함. 롤백, 다른 테이블에 사용하는 경우

 

-- alter sequence
-- 시퀀스 간격, 최대값, 최소값, cycle옵션, cache옵션 변경 가능
-- 시퀀스 시작값 변경 불가

--drop sequence
-- 시퀀스 삭제

 

4. Index

5. Synonym

 

728x90