뷰(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
'computer science > 데이터베이스' 카테고리의 다른 글
[데이터 베이스] MySQL트랜잭션 격리수준 (0) | 2022.11.07 |
---|---|
[데이터베이스] select문의 실행 순서 (0) | 2020.09.05 |
[데이터베이스] 병행 제어(Concurrency Control) (0) | 2020.09.04 |
[데이터베이스] 트랜잭션(Transaction) (0) | 2020.09.01 |
[데이터베이스] 정규화(Normalization) (0) | 2020.08.31 |