-
viewDatabase/mysql 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\G15-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;댓글