728x90
Object 유형
- Table
- View
- Sequence
- Index
- 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
'KDT > DB' 카테고리의 다른 글
240320 DB - 객체 사용을 위한 Data Dictionary, 조건부 표현식 1 (0) | 2024.03.20 |
---|---|
240313 DB - 데이터정의어(DDL) - Index, Synonym (0) | 2024.03.13 |
240304 DB - SQL활용 데이터정의어(DDL) - table3 (0) | 2024.03.04 |
240228 DB - SQL활용 데이터정의어(DDL) - table2 (0) | 2024.02.28 |
240222 DB - SQL활용 데이터정의어(DDL) - table 1 (0) | 2024.02.22 |