조금씩 꾸준히 완성을 향해

[MySQL] VIEW 본문

Database/MySQL

[MySQL] VIEW

all_sound 2022. 9. 21. 09:06

▶ VIEW 란,

 

일반 사용자 입장에서 테이블과 동일하게 사용하는 객체이다.
뷰를 생성한 후에는 테이블처럼 접근 가능하여 동일한 결과를 얻을 수 있다.
※ 주의 ! 뷰는 select 라는 쿼리를 선택해서 새로운 객체로 저장한 것. 테이블이 아님.

사용하는 이유

  • 보안에 도움(사용자가 중요한 정보에 바로 접근하지 못함)
  • 복잡한 쿼리 단순화(긴 쿼리를 뷰로 작성, 뷰를 테이블처럼 사용 가능)

단점

  • CPU 사용으로 인한 처리속도 저하
  • 부모 쿼리와 어떤 식으로든 연관된 서브 쿼리라서 부모 쿼리의 데이터가 변경되는 것에 영향을 받음.


▶ VIEW 생성

create view 뷰이름 as select 명령어
mysql> CREATE VIEW sample54v as SELECT * FROM sample54;
    -> SELECT * FROM sample54v;
+------+------+
| no   | a    |
+------+------+
|    1 |  100 |
|    2 |  900 |
|    4 |  900 |
|    3 |   20 |
+------+------+

mysql> SELECT * FROM sample54;
+------+------+
| no   | a    |
+------+------+
|    1 |  100 |
|    2 |  900 |
|    4 |  900 |
|    3 |   20 |
+------+------+

sample54를 가져와서 생성한 뷰인 sample54v를 확인해 보면 원본인 sample54 테이블과 같은 결과가 나온다.

뷰의 열 이름 지정하기

CREATE VIEW sample54v(n, v, v2) AS SELECT no, a, a*2 FROM sample54;

원본 테이블에서 뷰를 생성할 때 새로운 열 이름을 지정할 수 있다. ( 원하는 조건으로 연산해서 지정도 가능)

mysql> SELECT * FROM sample54v;
+------+------+------+
| n    | v    | v2   |
+------+------+------+
|    1 |  100 |  200 |
|    2 |  900 | 1800 |
|    4 |  900 | 1800 |
|    3 |   20 |   40 |
+------+------+------+

mysql> SELECT * FROM sample54v WHERE n = 1;
+------+------+------+
| n    | v    | v2   |
+------+------+------+
|    1 |  100 |  200 |
+------+------+------+

mysql> SELECT * FROM sample54v ORDER BY v2 LIMIT 2;
+------+------+------+
| n    | v    | v2   |
+------+------+------+
|    3 |   20 |   40 |
|    1 |  100 |  200 |
+------+------+------+

그리고 이렇게 SELECT문에서 사용할 수 있는 여러 명렁문, 기능 등을 활용할 수 있다.
※ 주의! 데이터 변경은 불가능!!

▶ VIEW 삭제

DROP VIEW sample54v;