top2blue 2016. 6. 29. 17:33

 
 
 • 뷰의 정의 
 • 뷰를 사용하기 위한 이유 
 • 뷰 생성 
 • 뷰 확인 
 • 뷰 삭제와 수정 
 • 뷰를 위한 권한 설정 
 
15-1. 뷰를 왜 사용하나?
 
  • SELECT 구문의 용어에 데이터베이스 오프젝트는 정의됨  
  • 가상 테이블 
  • 기본 테이블 혹은 뷰에서 조회 
  • 업데이트 할 수 있음 
 
15-2. CREATE VIEW 구문
 
 • 뷰의 정의 
 • 일반 문법
      CREATE[OR REPLACE] [ALGORITHM = 타입]
           VIEW 뷰명[(컬럼)]
           AS select_구문
           [WITH [CASCADED | LOCAL] CHECK OPTION]
 
 • CREATE VIEW 구문의 옵션 부분
   – OR REPACE
   – ALGORITHM
   – WITH CHECK OPTION 
 
15-3. SELECT로 CREATE VIEW
mysql> CREATE VIEW CityView AS SELECT ID, Name FROM City;
mysql> SELECT * FROM CityView;

 • 컬럼 리스트
mysql> CREATE VIEW v
     -> AS SELECT Country.Name, City.Name
     -> FROM Country, City WHERE Code = CountryCode;
mysql> CREATE VIEW v
     -> AS SELECT Country.Name AS CountryName, City.Name AS CityName
     -> FROM Country, City WHERE Code = CountryCode;
mysql> DESC v;

 • 컬럼 표현 
mysql> CREATE VIEW CountryLangCount AS
    -> SELECT Name, COUNT(Language)AS LangCount
    -> FROM Country, CountryLanguage 
-> WHERE Code = CountryCode -> GROUP BY Name;
mysql> DESCRIBE CountryLangCount;

 

15-4. 업데이트 할 수 있는 뷰
 
 • UPDATE와 DELETE 사용 
 • 1:1 관계여야 함
mysql> CREATE VIEWEuropePop AS
    -> SELECT Name, Population FROM Country
    -> WHERE Continent = 'Europe';

 • 업데이트 보기
mysql> SELECT * FROM EuropePop WHERE Name = 'San Marino';
mysql> UPDATEEuropePop SET Population = Population + 1
     -> WHERE Name = 'San Marino';
mysql> SELECT * FROM EuropePop WHERE Name = 'San Marino';

 • 업데이트와 삭제 보기 
mysql> SELECT * FROM Country WHERE Name = 'San Marino';
mysql> DELETEFROM EuropePop WHERE Name = 'San Marino';
mysql> SELECT * FROM EuropePop WHERE Name = 'San Marino';
mysql> SELECT * FROM Country WHERE Name = 'San Marino';

 

15-5. 입력할 수 있는 뷰
 
 • 업데이트가 가능한 뷰는 입력 할 수 있음
   - 필요 조건이 충족되어야 함
   - 뷰의 컬럼 이름이 이중이면 안됨
   - 기본 값이 없는 기본 테이블의 모든 컬럼을 포함해야 함
   - 컬럼에서 나올 수 없음 
 • AUTO_INCREMENT로 된 뷰에서의 입력
   - 뷰에 AUTO_INCREMENT 없이 테이블을 생성했다면 LAST_INSERT_ID() 값은 바뀌지 않을 것임 
 • 뷰에 입력하기 위해 업데이트 할 수 있어야 함 
 
15-6. WITH CHECK OPTION
 
 • 허용된 수정의 제약 위치 
 • 업데이트를 위한 WHERE 조건 확인
mysql> CREATE VIEW LargePop AS
    -> SELECT Name, Population FROM Country
    -> WHERE Population >= 100000000
    -> WITH CHECK OPTION;
mysql> SELECT * FROM LargePop;

 • 업데이트
mysql> UPDATE LargePop SET Population = Population + 1
     -> WHERE Name = 'Nigeria';
mysql> SELECT * FROM LargePop WHERE Name = 'Nigeria';
mysql> UPDATELargePop SET Population = 99999999
     -> WHERE Name = 'Nigeria';

 
15-7. 뷰 확인
 
 • 뷰에 의해 참조된 어떤 오프젝트는 틀림없이 존재 
 • CHECK TABLE 명령어 사용 
mysql> CREATE TABLE t1 (i INT);
mysql> CREATE VIEW v AS SELECT i FROM t1;
mysql> RENAME TABLE t1 TO t2;
mysql> CHECK TABLE v\G

15-8. 뷰 수정
 
 • 존재하는 뷰의 정의 변경 
 • ALTER VIEW 구문 사용
mysql> ALTER VIEW LargePop AS
     -> SELECT Name, Population FROM Country
     -> WHERE Population >= 100000000;

 • 뷰의 변경을 위해 CREATE VIEW와 REPLACE VIEW를 사용 
 
15-9. 뷰 삭제
 
 • 한개 혹은 그 이상의 뷰 삭제 
 • DROP VIEW 구문 사용
   - IF EXISTS 절
mysql> DROP VIEW IF EXISTSv1, v2;
mysql> SHOW WARNINGS;

 
15-10. INFORMATION_SCHEMA
 
 • 데이터베이스 안에 VIEWS 테이블
mysql> SELECT * FROM INFORMATION_SCHEMA.VIEWS
     -> WHERE TABLE_NAME = 'CityView‘
     -> AND TABLE_SCHEMA = 'world'\G

 
15-11. SHOW 구문
 
 • 메타데이타 보기 
 • 뷰를 위한 SHOW CREATE VIEW
mysql> SHOW CREATE VIEW CityView\G
 • 뷰를 위한 SHOW와 DESCRIBE 구문
    – DESCRIBE
    – SHOW TABLE STATUS
    – SHOW TABLES
    – SHOW FULL TABLES
mysql> SHOW FULL TABLES FROM world;