수색…


통사론

  • CREATE VIEW view_name AS SELECT column_name (s) FROM table_name WHERE 조건; /// 간단한보기 구문 작성

  • CREATE [또는 REPLACE] [ALGORITHM = {UNDEFINED | 병합 | TEMPTABLE}] [DEFINER = {사용자 | CURRENT_USER}] [SQL 보안 (DEFINER | INVOKER}] view_name [(열 목록)] AS select_statement [WITH [캐스케이드 | LOCAL] CHECK OPTION]; /// 전체보기 구문 만들기

  • DROP VIEW [존재하는 경우] [db_name.] view_name; /// 뷰 구문 삭제

매개 변수

매개 변수 세부
view_name 보기 이름
SELECT 문 뷰에 압축 될 SQL 문. 하나 이상의 테이블에서 데이터를 페치 (fetch)하는 SELECT 문일 수 있습니다.

비고

뷰는 가상 테이블이며 반환되는 데이터를 포함하지 않습니다. 복잡한 쿼리를 반복해서 작성할 필요가 없습니다.

  • 보기가 만들어지기 전에 해당 사양은 전적으로 SELECT 문으로 구성됩니다. SELECT 문은 FROM 절에 하위 쿼리를 포함 할 수 없습니다.
  • 일단 뷰가 만들어지면 테이블과 마찬가지로 주로 사용되며 테이블과 같이 SELECT 선택할 수 있습니다.

테이블의 일부 컬럼을 제한하려면 다른 사용자로부터보기를 작성해야합니다.

  • 예를 들면 다음과 같습니다. 조직에서 관리자가 "Sales"라는 이름의 테이블에서 정보를 거의 볼 수 없도록하려는 경우 소프트웨어 엔지니어가 "Sales"테이블의 모든 필드를 볼 수 없도록하려는 경우입니다. 여기에서 관리자와 소프트웨어 엔지니어를위한 두 가지보기를 만들 수 있습니다.

성능 . VIEWs 는 통사론적인 설탕입니다. 그러나 실적이 조회의 선택 항목이 접혀있는 해당 검색어보다 나쁠 수도 있고 그렇지 않을 수도 있습니다. 최적화 도구는이 기능을 "축소"하려고 시도하지만 항상 성공하지는 않습니다. MySQL 5.7.6에서는 Optimizer의 몇 가지 개선 사항을 제공합니다. 그러나 관계없이 VIEW 를 사용하면 더 빠른 쿼리가 생성되지 않습니다.

보기 만들기

특권

CREATE VIEW.은 뷰에 대한 CREATE VIEW 특권과 SELECT.에 의해 선택된 각 컬럼에 대한 특권이 필요합니다. SELECT.의 다른 곳에서 사용되는 C 럼의 경우, SELECT 특권이 있어야합니다. OR REPLACE 절이 있으면보기에 대한 DROP 권한도 있어야합니다. CREATE VIEW는 DEFINER 값에 따라 SUPER 권한을 요구할 수도 있습니다 (이 절의 뒷부분에서 설명).

뷰가 참조되면 권한 검사가 발생합니다.

뷰는 데이터베이스에 속합니다. 기본적으로 새 뷰가 기본 데이터베이스에 작성됩니다. 지정된 데이터베이스에서 명시 적으로보기를 만들려면 정규화 된 이름을 사용하십시오.

예 :

db_name.view_name

mysql> CREATE VIEW test.v AS SELECT * FROM t;

주 - 데이터베이스 내에서 기본 테이블과 뷰는 동일한 네임 스페이스를 공유하므로 기본 테이블과 뷰는 동일한 이름을 가질 수 없습니다.

보기는 다음을 수행 할 수 있습니다.

  • 여러 종류의 SELECT 문에서 작성
  • 기본 테이블 또는 다른 뷰를 참조하십시오.
  • 조인, UNION 및 하위 쿼리 사용
  • SELECT는 테이블을 참조 할 필요가 없습니다.

다른 예시

다음 예제는 다른 테이블의 두 열과 해당 열에서 계산 된 식을 선택하는 뷰를 정의합니다.

mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

제한 사항

  • MySQL 5.7.7 이전 버전의 SELECT 문은 FROM 절에 하위 쿼리를 포함 할 수 없습니다.
  • SELECT 문은 시스템 변수 또는 사용자 정의 변수를 참조 할 수 없습니다.
  • 저장된 프로그램 내에서 SELECT 문은 프로그램 매개 변수 또는 로컬 변수를 참조 할 수 없습니다.
  • SELECT.은 준비된 명령. 매개 변수를 참조 할 수 없습니다.
  • 정의에 참조 된 테이블이나 뷰가 존재해야합니다. 뷰가 생성 된 후에는 테이블 또는 뷰를 삭제할 수 있습니다.
    정의가 참조한다. 이 경우 뷰를 사용하면 오류가 발생합니다. 이러한 종류의 문제점에 대한 뷰 정의를 점검하려면 CHECK TABLE 문을 사용하십시오.
  • 이 정의는 TEMPORARY 테이블을 참조 할 수 없으며
    TEMPORARY 뷰를 작성하십시오.
  • 트리거를 뷰에 연결할 수 없습니다.
  • SELECT 문의 열 이름 별칭은 최대 열 길이가 64 자 (최대 별칭이 아님)와 비교하여 검사됩니다
    길이는 256 자입니다.
  • VIEW 는 동등한 SELECT 뿐만 아니라 최적화 할 수도 있고 그렇지 않을 수도 있습니다. 더 나은 최적화는 거의 없습니다.

두 테이블의 뷰

뷰는 둘 이상의 테이블에서 데이터를 가져 오는 데 사용될 수있을 때 가장 유용합니다.

CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a 
LEFT OUTER JOIN other_table b 
ON a.id = b.id

에서 MySQL은보기가 구체화되지 않습니다. SELECT * FROM myview 라는 간단한 쿼리를 수행하면 mysql은 실제로 장면 뒤에서 LEFT JOIN을 수행한다.

한 번 생성 된 뷰를 다른 뷰 또는 테이블에 조인 할 수 있습니다.

VIEW를 통해 테이블 ​​업데이트하기

VIEW 는 테이블과 매우 흡사합니다. 테이블을 UPDATE 할 수 있지만 뷰를 해당 테이블로 업데이트 할 수도 업데이트하지 않을 수도 있습니다. 일반적으로, 뷰의 SELECT 가 임시 테이블을 요구하기에 충분히 복잡한 경우, UPDATE 는 허용되지 않습니다.

GROUP BY , UNION , HAVING , DISTINCT 및 일부 하위 쿼리와 같은 항목은 뷰를 업데이트 할 수 없게합니다. 참조 설명서의 세부 사항.

보기 해체

- 현재 데이터베이스에 뷰를 작성하고 h 제하십시오.

CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;

- 다른 데이터베이스의 테이블을 참조하는 뷰를 작성하고 제거하십시오.

CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow