본문 바로가기
computer science/데이터베이스

[데이터베이스] 뷰(View)

by 박연호의 개발 블로그 2020. 9. 5.

뷰(View)는 select문을 저장한 객체라고 할 수 있습니다. 데이터베이스 존재하는 일종의 가상 테이블을 의미하며 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하고 있지는 않습니다. 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰 입니다. 따라서 뷰를 참조하면 그에 정의된 SELECT명령의 실행결과를 테이블처럼 사용할 수 있습니다.

 

나중에 사용자가 뷰를 사용하게 되면 마치 뷰가 기본 테이블인 것 같이 만들어 제공합니다. 따라서 뷰는 실행 시간에만 구체화되는 특수한 테이블 입니다.


1. 뷰의 생성

create view 뷰이름[원하는 속성] as select문 [with check option]; // []는 있어도 되고 없어도 되고

as select문 : 원하는 select문을 작성하며 union이나 order by는 사용할 수 없습니다.

with check option : 갱신이나 삽입 연산이 실행될 때 뷰의 정의 조건을 위배하면 실행을 거부합니다.

mysql> create view emp_view as select first_name, last_name, gender from employees limit 10;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from emp_view;
+------------+-----------+--------+
| first_name | last_name | gender |
+------------+-----------+--------+
| Bezalel    | Simmel    | F      |
| Parto      | Bamford   | M      |
| Chirstian  | Koblick   | M      |
| Kyoichi    | Maliniak  | M      |
| Anneke     | Preusig   | F      |
| Tzvetan    | Zielinski | F      |
| Saniya     | Kalloufi  | M      |
| Sumant     | Peac      | F      |
| Duangkaew  | Piveteau  | F      |
| Mary       | Sluis     | F      |
+------------+-----------+--------+
10 rows in set (0.00 sec)

 

2. 뷰의 삭제

drop view 뷰이름 [restrict or cascade];

restrict : 뷰를 다른 곳에서 참조하고 있으면 제거가 취소됩니다.

cascade : 뷰를 참조하는 다른 뷰나 제약 조껀까지 모두 제거합니다.

mysql> drop view emp_view;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from emp_view;
ERROR 1146 (42S02): Table 'employees.emp_view' doesn't exist