-
[DB] Mysql View데이터베이스 2020. 12. 6. 21:05728x90
View
다른 DB user 에게 정보를 제한적으로 제공하고자 할 때 사용하는 기능으로 보안을 위함
예를 들어 Professor 테이블을 공개하되 Salary(연봉) 정보는 제외한 column 들만 공개하고싶다. 하는 요구사항이 있을 때 사용
View 는 Virtual Relation 이라고 불리기도 함
CREATE VIEW faculty AS SELECT pID, name, deptName FROM Professor;
SELECT name FROM faculty WHERE deptName = ‘CS’;
View 는 항상 최신의 데이터를 갖고 있음 → 실제 Table 을 다른 창구로 바라보는 것일 뿐이기 때문
View 를 이용하여 또 다른 View 를 정의할 수도 있음
View Expansion : View 에 대해서 Select 쿼리가 이루어질 때 View 에 대한 정의(Definition query) 로 치환되어 처리되는 것을 말함
SELECT * FROM faculty;
위 구문은 View expansion 에 의해 아래 구문으로 치환됨
SELECT * FROM (SELECT pID, name, deptName FROM Professor);
View modification
INSERT INTO faculty VALUES (‘30765’, ‘Yang’, ‘CS’);
위 insert 문은 아래 Insert 문으로 처리됨
INSERT INTO Professor VALUES (‘30765’, ‘Yang’, ‘CS’, null);
View 는 특정 제약 하에서는 base relation 에 수정을 허용
view 에 없는 컬럼이 null 을 허용해야함
단일 Base relation 을 가져야함 = View 가 단일 테이블에 연관되어 있어야함
CREATE VIEW professorInfo as SELECT pID, name, building FROM professor, department WHERE professor.deptName = department.deptName
INSERT INTO professorInfo VALUES (‘666’, ‘White’, ‘Taylor’);
의 경우 deptName 을 결정할 수 없기 때문
집계함수 혹은 distinct, group by가 있으면 안됨
CREATE VIEW departmentTotalSalary(deptName, totalSalary) AS SELECT deptName, SUM(salary) FROM professor GROUP BY deptName;
INSERT INTO departmentTotalSalary VALUES (‘CS’, 100,000);
이런 경우 base relation 인 professor 테이블을 어떻게 변경할 지 결정할 수 없음With check option
CREATE VIEW CSProfessors AS SELECT * FROM professor WHERE deptName = ‘CS’;
INSERT INTO CSProfessors VALUES (‘255’, ‘Brown’, ‘Math’, 1000);
CSProfessors 는 ‘CS’ 학과 교수에 관련된 View 인데 수학과 교수를 추가하는 논리적인 오류를 범하고 있음
이를 막기 위한 옵션으로 CREATE View 구문 맨 끝에 WITH CHECK OPTION 을 붙여주면 이를 막음
View 한계
-
View 에 대해서는 index 를 만들어주지 않음
-
View 에는 key, constraint 를 생성할 수 없음
'데이터베이스' 카테고리의 다른 글
[DB] Mysql 트리거 (0) 2020.12.08 [DB] On Delete, On Update, Check, Assertion (0) 2020.12.06 [DB] Mysql C/C++ 함수 연동 (0) 2020.12.06 [DB] Mysql 프로시져 (0) 2020.12.06 [DB] Mysql 함수 정의 및 사용 (3) 2020.12.06 -