반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[DataBase] View & Index 본문
반응형
View 뷰
- 하나 이상의 테이블을 합하여 만든 가상의 테이블
- 실제로 존재하지 않는 가상의 테이블( 실제로 존재하지 않는 select한 결과)
- 자주 사용하는 복잡한 sql을 미리 뷰를 만들어 두어 편리하게 사용 가능
- 기본문법 create view 뷰이름 [컬럼이름] as select 문
- 요약 : 실제로 존재하지 않는 가상의 논리적인 테이블을 말하며 복잡한 sql을 미리 뷰를 만들어 둠으로써 쉽게 조회할 수 있고 사용자별 접근 제한을 위해 뷰를 사용한다.
뷰를 통한 추가, 수정, 삭제 가능
- 뷰를 통한 레코드 추가
- 뷰에 레코드 추가시 실제 레코드는 뷰를 만들 때 사용한 모테이블에 추가된다. 그렇기 때문에 뷰 생성시 사용한 컬럼 외의 칼럼들은 null을 허용하거나 default값이 설정되어 있어야 view를 통해 레코드를 추가 할 수 있다.
- 뷰 생성시 조건에 맞지 않는 레코드 추가 가능. 단, 실제로는 모 테이블에만 추가되고 뷰의 조건에는 맞지 않아 뷰에는 나타나지 않는다.
- 뷰를 통한 수정
- 뷰를 통해 수정 가능
- 뷰 생성시에 설정된 조건과 맞지 않는 값으로 수정이 가능하다. 단, 뷰의 조건과 맞지 않는 값으로 수정된 레코드는 뷰에 나타나지 않게 된다.
- 실제 뷰 생성시 사용한 모테이블 수정 반영됨
- 뷰를 통한 삭제
- 삭제 가능
- 실제 뷰 생성시 사용한 모테이블에서도 삭제됨
장점
- 편리성 및 재사용성 : 자주 사용되는 복잡한 질의를 뷰로 미리 정의해놓을 수 있음 -> 복잡한 질의 간단 작성
- 보안성
with check option
- create view 뷰이름 as select문 조건식 with check option;
- 뷰 생성시 사용한 조건식에 맞는 레코드만 추가, 수정 하도록 하기 위한 옵션
- 뷰의 조건에 맞지 않는 레코드 추가, 수정 시 with check option의 조건에 위배 된다고 뜨며 추가, 수정 불가하다.
with read only
- create view 뷰이름 as select문 조건식 with read only;
- 조회만 가능한 뷰 생성
- 추가, 수정 불가
시스템 뷰
- oracle에서 제공하는 뷰
- user_tables : 사용자가 만든 모든 테이블의 정보를 갖고있음
- user_objects : 사용자가 만든 모든 객체 의 정보를 갖고있음
- user_contraints: 사용자가 만든 모든 제약의 정보를 갖고있음
- constraint_name: 제약명
- constraint_type : 제약의 종류, C: chectk, R: 참조, P : Primary key
- status : 제약의 상태, 때로는 제약을 비활성화 시킬 수 있다.
- 제약 비활성화: alter table 테이블명 disable contraint 제약명;
- 제약 활성화: alter table 테이블이름 enable constraint 제약명;
Index
- 도서의 맨뒤에 색인표를 만들어 책 내용을 찾기 쉽도록 하는 것 처럼 테이블의 특정컬럼에 인덱스를 만들어 검색속도를 향상시킬 수 있다. - 책의 페이지수가 많을때에 색인표가 유용한 것 처럼 레코드의 수가 많을때에 인덱스가 유용하다. 만약, 책을 만들고 색인표 까지 만들었는데 책내용이 변경이 되었다면 색인표는 오히려 책 내용을 찾기가 어려워진다. 마찬가지로 인덱스를 만들어두고 레코드의 값의 변경이 있다면 오히려 인덱스가 성능저하의 원인이 된다.
- 인덱스 생성: create index 인덱스이름 on 테이블(컬럼);
- 테이블 생성 시 primary key로 설정한 컬럼은 자동으로 인덱스 생성
- 인덱스 삭제 : drop index 인덱스이름
- 생성한 인덱스는 user_objects의 object_name와 user_indexes의 index_name에 자동 저장된다.
'Back-End > Database' 카테고리의 다른 글
[DataBase] 데이터 모델링 과정 & 용어 (0) | 2022.05.02 |
---|---|
[DataBase] DB Programming(PL/SQL) (0) | 2022.04.29 |
[DataBase] 내장 함수 (0) | 2022.04.26 |
[DataBase] 데이터 조작어(DML) - 명령어 (0) | 2022.04.25 |
[DataBase] 데이터 정의어(DDL) (0) | 2022.04.24 |