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

    뷰(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

     

    댓글

    Designed by JB FACTORY