Loading...
MySQL 9.5 Reference Manual 9.5의 27.11 Restrictions on Views의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
view 정의에서 참조할 수 있는 테이블의 최대 개수는 61개입니다.
view 처리(view processing)는 최적화되어 있지 않습니다:
view에 대해 인덱스를 생성하는 것은 불가능합니다.
merge 알고리즘을 사용하여 처리되는 view에는 인덱스를 사용할 수 있습니다. 그러나 temptable 알고리즘으로 처리되는 view는 기본 테이블에 있는 인덱스를 활용할 수 없습니다 (비록 temporary 테이블을 생성하는 동안에는 인덱스를 사용할 수 있습니다).
일반적인 원칙으로, 서브쿼리에서와 같은 테이블을 select하면서 그 테이블을 수정할 수는 없습니다. 자세한 내용은
Section 15.2.15.12, “Restrictions on Subqueries”를 참조하십시오.
이와 동일한 원칙은 view가 테이블에서 select하면서, 그 view가 서브쿼리에서 해당 테이블을 select하고, 그 view가 merge 알고리즘을 사용하여 평가되는 경우에도 적용됩니다. 예:
1CREATE VIEW v1 AS 2SELECT * FROM t2 WHERE EXISTS (SELECT 1 FROM t1 WHERE t1.a = t2.a); 3 4UPDATE t1, v2 SET t1.a = 1 WHERE t1.b = v2.b;
view가 temporary 테이블을 사용하여 평가되는 경우에는, view 서브쿼리에서 해당 테이블을 select하면서 outer 쿼리에서 그 테이블을 수정할 수 있습니다. 이 경우, view는 temporary 테이블에 저장되므로, 실제로는 서브쿼리에서 테이블을 select하면서 동시에 그것을 수정하는 것이 아닙니다. (이것은 view 정의에서 ALGORITHM = TEMPTABLE을 지정하여 MySQL이 temptable 알고리즘을 사용하도록 강제하고자 할 수 있는 또 다른 이유입니다.)
view 정의에 사용되는 테이블을 drop하거나 변경하기 위해 DROP TABLE 또는
ALTER TABLE을 사용할 수 있습니다. 이러한 DROP 또는 ALTER 연산은 view를 무효화하더라도 아무런 warning을 발생시키지 않습니다. 대신, 나중에 view가 사용될 때 error가 발생합니다.
CHECK TABLE을 사용하여 DROP 또는 ALTER 연산에 의해 무효화된 view를 검사할 수 있습니다.
view updatability와 관련하여, view에 대한 전체적인 목표는 이론적으로 갱신 가능한 모든 view는 실제로도 갱신 가능하도록 하는 것입니다. 이론적으로 갱신 가능한 많은 view들이 현재 갱신 가능하지만, 여전히 제한 사항이 존재합니다. 자세한 내용은
Section 27.6.3, “Updatable and Insertable Views”를 참조하십시오.
views의 현재 구현에는 결함이 존재합니다. 사용자가 view를 생성하는 데 필요한 기본 권한들(CREATE VIEW 및
SELECT 권한)을 부여받은 경우, 그 사용자는 SHOW CREATE VIEW를 호출하여 해당 객체를 볼 수 없습니다. 그 사용자에게
SHOW VIEW 권한도 부여되어 있지 않은 한 그렇습니다.
이 결함은 mysqldump를 사용하여 데이터베이스를 백업할 때 문제를 일으킬 수 있으며, 이는 권한 부족으로 인해 실패할 수 있습니다. 이 문제는 Bug #22062에 설명되어 있습니다.
이 문제에 대한 우회 방법은 administrator가 CREATE VIEW를 부여받은 사용자에게 수동으로 SHOW VIEW 권한을 부여하는 것입니다. view가 생성될 때 MySQL은 이 권한을 암묵적으로 부여하지 않기 때문입니다.
views에는 인덱스가 없으므로, 인덱스 힌트는 적용되지 않습니다. view에서 select할 때 인덱스 힌트를 사용하는 것은 허용되지 않습니다.
SHOW CREATE VIEW는 각 column에 대해 AS alias_name 절을 사용하여 view 정의를 표시합니다. column이 expression에서 생성된 경우, 기본 alias는 해당 expression 텍스트이며, 이는 상당히 길어질 수 있습니다. CREATE VIEW statement에서 column 이름에 대한 alias는 최대 column 길이인 64자(최대 alias 길이인 256자가 아님)에 대해 검사됩니다. 그 결과, SHOW CREATE VIEW의 output으로부터 생성된 view는 column alias가 64자를 초과하는 경우 실패합니다. 이는 alias가 너무 긴 view에 대해 다음과 같은 상황에서 문제를 일으킬 수 있습니다:
column 길이 제한을 강제하는 새로운 replica로 view 정의를 replicate하는 데 실패합니다.
mysqldump로 생성된 dump file을 column 길이 제한을 강제하는 서버에 로드할 수 없습니다.
이 두 문제 중 어느 하나에 대한 우회 방법은 각 문제가 되는 view 정의를 수정하여 더 짧은 column 이름을 제공하는 alias를 사용하도록 하는 것입니다. 그러면 view는 제대로 replicate되며, error 없이 dump 및 reload할 수 있습니다. 정의를 수정하려면 DROP VIEW와 CREATE VIEW를 사용하여 view를 drop한 후 다시 생성하거나,
CREATE OR REPLACE VIEW로 정의를 대체하십시오.
dump file에서 view 정의를 reload할 때 발생하는 문제의 또 다른 우회 방법은 dump file을 편집하여 그 안의 CREATE VIEW statement를 수정하는 것입니다. 그러나 이 방법은 원래의 view 정의를 변경하지 않으므로, 이후의 dump 작업에서 문제를 일으킬 수 있습니다.
27.10 Restrictions on Stored Programs
28 INFORMATION_SCHEMA Tables