빅데이터 및 DB/MySQL

[MySQL] 뷰(View) 생성 이유 및 뷰 생성,수정,삭제,조회

Steve Jang 2022. 8. 12. 22:14

뷰(View)의 생성 목적

뷰(View)는 관리 측면과 사용성 편의, 유지 보수, 보안 등을 위해서 사용하는 기법이다. 쿼리(Query)가 복잡할 경우 이를 프로그램으로 구현하게 되면 유지보수가 잘 안될 수도 있고, 초급 개발자의 경우 실수를 범할 수 있다. 게다가 쿼리 및 테이블을 공개해야 할 경우 보안 측면에서 문제가 발생할 수 있다.

 

[MySQL] 뷰(View) 생성 이유 및 뷰 생성,수정,삭제,조회

 

즉, 뷰는 어떤 하나의 목적으로 사용하는 것이 아니라, 편의성, 보안성, 유지 보수 등의 다양한 이유로 인해서 사용하는 것이라 생각하면 된다. 즉 위 내용을 간단히 정리하자면 아래와 같다.

 

  • 편의성 : 복잡한 쿼리를 단축 시켜 놓기 때문에 개발을 보다 쉽게 진행할 수 있다
  • 보안성 : 테이블 명칭과 컬럼 명칭을 숨길 수 있기 때문에 보안성이 뛰어나다
  • 유지보수성 : 코드가 단축되기 때문에 유지보수에 유리하다

 

뷰(View) 생성 방법

CREATE VIEW 뷰명칭 AS
SELECT 필드1, 필드2, ...
FROM 테이블
WHERE 조건

쉽게 생각하면 뷰는 위에 보다시피, Select 쿼리 위에 create view [뷰명칭] as를 넣으면 된다. 그럼 이해를 쉽게 돕기 위해 예제를 참고해 보도록 한다

 

간단한 유니온 쿼리

 

위 화면은 구조가 간단한 테이블 2개를 유니온 하여 보여주고 있다. 이 유니온으로 완성된 쿼리를 뷰(View)를 사용하여 테이블을 숨기고 보다 심플하게 바꿔보도록 한다.

 

 

예제 뷰 생성

create view content_vw as 
select title, content, 'CONTENT' as category
from content_tbl
union all
select title, contents as content, 'NEWS' as category
from news_tbl

 

쿼리에 이상이 없다면 아래와 같이 DbTool에 있는 Views 항목에 View가 만들어진 것을 확인할 수 있다.

 

view 생성

 

생성 결과

 

생성된 뷰는 언제든지 수정할 수 삭제할 수 있다. 일단 만들어진 뷰를 확인해보면 테이블의 데이터를 기반으로 자동으로 Data Type이 지정된 것을 볼 수 있다. category라는 컬럼은 문자열을 출력하는 컬럼이다보니, 테이블에 없지만 뷰는 자동으로 가장 큰 문자열 크기로 Data Type이 지정되었다.

 

뷰(View) 조회

만들어진 뷰는 언제든지 테이블처럼 쓸 수 있으며 테이블의 결과를 조회하는 방식과 동일하다.

SELECT 컬럼1, 컬럼2 ... 컬럼n
FROM 뷰이름
WHERE 조건절

 

뷰(View) 조회 결과

뷰 조회 결과

 

뷰(View) 수정

ALTER VIEW 뷰이름 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블

뷰 수정 방식은 CREATE 대신 ALTER만 사용하면 된다. 

 

alter 구문

 

위 화면은 content_vw에서 category 컬럼을 alter로 제거한 것의 캡쳐 화면이다

 

카테고리가 사라진 결과 화면

 

category 컬럼이 사라진 것을 확인할 수 있다.

 

뷰(View) 삭제

뷰를 더이상 사용하지 않을 경우, 아래와 같은 명령어로 삭제할 수 있다.

DROP VIEW 뷰이름

 

 

 

 

drop view content_vw로 성공적으로 view가 삭제된 화면이다

 

 

삭제가 되었는데 위와 같이 select를 날릴 시 SQL Error [1146] [42S02]: (conn=18) Table [뷰이름] doesn't exist 에러가 발생하게 된다.

 

MySQL 관련 포스팅

[MySQL] Union으로 테이블 합치기

 

[MySQL] Union으로 테이블 합치기

포스팅에 앞서 MySQL과 MariaDB는 사실상 동일한 DB이기 때문에 본 포스팅은 MariaDB에서도 적용됩니다. UNION의 개념 우리가 하나의 쿼리안에 다양한 테이블의 정보를 담기 위해서는 서브쿼리와 조인(J

needjarvis.tistory.com

[MySQL] group_concat 사용법 모음 (문자열 구분자 묶음)

 

[MySQL] group_concat 사용법 모음 (문자열 구분자 묶음)

여러개의 Row로 되어 있는 데이터를 한개의 값으로 묶어서 가지고 오고 싶을 경우, MySQL(혹은 MariaDB)에서는 Group_Concat을 사용하여 처리할 수 있다. 실행 예시 테이블 생성 CREATE TABLE `stock` ( `stock_i..

needjarvis.tistory.com

[MySQL] date_format 설정 (날짜 포맷 변경)

 

[MySQL] date_format 설정 (날짜 포맷 변경)

MySQL에서는 date_format으로 날짜값을 문자열로 변경하는 포맷을 지원해 준다. 아마 DBMS로 개발을 하는 웹개발자라면 한번씩은 꼭 써보게 되는 기능일텐데, 오늘은 date_format의 포맷 설정값들과 예시

needjarvis.tistory.com