반응형

'뷰정의'에 해당되는 글 1건

  1. 2017.12.13 MySQL 뷰 이용하기.

MySQL 뷰 이용하기.

MySQL 2017. 12. 13. 11:44
반응형

MySQL 뷰 이용하기.

 

뷰의 정의

뷰는 무엇일까요?

데이터를 추출할 때 select를 사용해서 다양한 방법으로 데이터를 추출했습니다.

이렇게 select한 결과를 가상 테이블에 저장한 것을 뷰라고 합니다.

뷰는 테이블이 아닙니다. 그러므로 뷰의 레코드와 컬럼에는 데이터가 존재하지 않고 데이터를 추출하기 위한 정보일 뿐입니다.

추출한 것을 뷰로 한번 실행해 두면 사용자 정의 형식의 테이블로 이용할 수가 있습니다.

사용자의 입장에서 보면 뷰와 테이블의 이용 방법에는 큰 차이가 없습니다.

 

뷰 생성하기.

뷰를 생성하는 방법은 다음과 같이 명령문을 사용합니다.

 

create view 뷰이름 as select 컬럼명 from 테이블명 where 조건;

 

결과적으로 어떠한 조건으로 컬럼을 모아 가상의 테이블을 만드는 것입니다.

지금까지 실행했던 많은 select의 결과를 create view ~ as를 이용해서 뷰를 만든다고 생각하면 됩니다.

뷰를 생성해 보겠습니다.

 

select * from table_member;

 

create view view_member

as select name, age from table_member;

 

select * from view_member;

 

뷰에서 컬럼 값 변경하기.

뷰는 참조 테이블의 일부분을 표시하고 있다고 할 수 있습니다. 따라서 참조 테이블의 값이 변경되면 뷰의 값도 변경됩니다.

뷰는 참조 테이블의 일부분을 표시하는 동시에 참조 테이블의 데이터 창구이기도 합니다. 그래서 뷰의 값이 변경되면 참조 테이블의 값도 변경됩니다.

다음 실습은 view_member 의 강백호를 서태웅으로 변경하여 참조 테이블과 뷰를 확인해 보겠습니다.

update view_member

set name = ‘서태웅

where name = ‘강백호’;

 

select * from view_member;

select * from table_member;

위의 결과와 같이 뷰의 값을 변경하면 참조하는 테이블의 데이터도 변경된다는 것이 확인되었습니다.

 

 

조건을 설정해서 뷰 만들기.

2개의 테이블을 이용하여 where로 조건을 설정해서 뷰를 만들어 보겠습니다.

table_sales sales 컬럼 조건이 90이상인 레코드만 추출하여 number, sales table_member name로 구성된 뷰인 view_sales 를 만들어 보겠습니다.

 

select * from table_sales;

select * from table_member;

 

create view view_sales

as select A.number, A.sales, B.name

from table_sales as A

join table_member as B

using(number) where A.sales >= 90;

 

select * from view_sales;

 

뷰 확인하기.

어떤 뷰가 있는지 확인하려면 SHOW TABLES를 사용합니다.

 

show tables;

 

테이블과 마찬가지로 컬럼의 구조는 DESC로 확인합니다.

 

desc view_sales;

 

뷰의 조건에 일치하지 않으면 오류가 나게 설정하기.

뷰에서 insert를 하면 where 조건에 일치하지 않아도 관련 테이블에 데이터가 추가 됩니다.

하지만 조건을 설정한 뷰에 그 조건을 무시하고 데이터가 입력되면 곤란해지는 때도 있습니다. 또한 뷰에서 입력한 데이터를 뷰에서 확인할 수 없다면 곤란하겠지요. 이런 문제가 일어나지 않게 하려면, 뷰에서는 조건에 일치하지 않는 데이터는 입력할 수 없도록 설정할 수 있습니다.

WHERE 조건에 일치하지 않으면 입력할 수 없도록 설정하려면 create view로 뷰를 생성할 때, WITH CHECK OPTION을 추가합니다.

 

create view view_sales2

as select number, sales from table_sales

where sales > 100

with check option;

 

insert into view_sales2 values(‘A8’, 50);

 

뷰 덮어쓰기.

이미 같은 이름의 뷰가 존재할 때 덮어쓰기를 해서 뷰를 생성하는 방법입니다.

Create view를 실행할 때, 생성하려고 하는 이름의 뷰가 이미 존재하면 오류가 발생합니다. 이럴 때 create or replace view 와 같이 or replace를 추가하면 덮어쓰기를 할 수 있습니다. , 이미 존재하는 같은 이름의 뷰를 삭제하고 새롭게 뷰를 생성하게 됩니다.

다음과 같이 사용합니다.

create or replace view view_sales

as select now();

 

select * from view_sales;

 

뷰의 컬럼 구조 변경하기.

뷰의 정의를 변경할 때는 alter view를 사용합니다.

명령문은 다음과 같습니다.

alter view 뷰이름 as select 컬럼명 from 테이블이름;

 

다음 명령을 실행하면 이미 존재하는 view_salestable_sales의 컬럼 name, age와 같은 구조로 변경됩니다.

 

alter view view_sales

as select number, sales from table_sales;

 

select * from view_sales;

 

뷰 삭제하기.

MySQL에서 무언가를 삭제할 때에는 drop 명령을 상용했습니다. 뷰를 삭제할 때에도 drop명령을 사용합니다. 데이터베이스나 테이블에 사용하는 명령과 같습니다.

 

drop view 뷰이름;

단 삭제할 뷰가 존재하지 않으면 오류가 발생합니다.

만약, 다음과 같이 if exists를 추가하면 삭제할 뷰가 존재하지 않아도 오류가 발생하지 않습니다.

 

drop view if exists view_sales;

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 저장함수.  (0) 2017.12.27
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의  (0) 2017.12.11
MySQL 셀프 조인.  (2) 2017.12.08
MySQL 외부 JOIN 사용하기.  (0) 2017.12.07
Posted by 컴스터
,


반응형