>  기사  >  데이터 베이스  >  mysql이 뷰를 생성할 수 없으면 어떻게 해야 합니까?

mysql이 뷰를 생성할 수 없으면 어떻게 해야 합니까?

coldplay.xixi
coldplay.xixi원래의
2020-10-13 16:51:173236검색

mysql이 뷰를 생성할 수 없는 문제에 대한 해결 방법: CREATE VIEW 문을 사용하여 뷰를 생성합니다. 코드는 [CREATE VIEW 329c7848abe3f239bf8abe905955e0b2 AS语句>기본 문법

조회수는 CREATE VIEW 문을 사용하여 생성됩니다.

mysql이 뷰를 생성할 수 없으면 어떻게 해야 합니까?구문 형식은 다음과 같습니다.

CREATE VIEW <视图名> AS <SELECT语句>
구문 설명은 다음과 같습니다.

3fc120a62974e3a500e68b9c612170f3: 보기의 이름을 지정합니다. 이름은 데이터베이스에서 고유해야 하며 다른 테이블이나 뷰와 동일한 이름을 가질 수 없습니다. eed5c230ec1e936e29d1cc474d0d3a9d: 여러 기본 테이블이나 소스 뷰를 쿼리하는 데 사용할 수 있는 뷰를 생성하려면 SELECT 문을 지정합니다. 생성된 뷰의 SELECT 문 사양에는 다음과 같은 제한 사항이 있습니다. CREATE VIEW 권한 외에도 사용자는 작업과 관련된 기본 테이블 및 기타 뷰에 대한 관련 권한도 갖습니다.

SELECT 문은 시스템 또는 사용자 변수를 참조할 수 없습니다.

SELECT 문은 FROM 절에 하위 쿼리를 포함할 수 없습니다.

SELECT 문은 준비된 문 매개 변수를 참조할 수 없습니다.

뷰 정의에서 참조하는 테이블이나 뷰가 존재해야 합니다. 그러나 뷰를 생성한 후 정의가 참조하는 테이블이나 뷰를 삭제할 수 있습니다. CHECK TABLE 문을 사용하여 이러한 문제에 대한 뷰 정의를 확인할 수 있습니다.

    ORDER BY 문은 뷰 정의에서 허용되지만 자체 ORDER BY 문을 사용하는 특정 뷰에서 선택하면 뷰 정의의 ORDER BY가 무시됩니다.
  • 뷰 정의에서 TEMPORARY 테이블(임시 테이블)을 참조할 수 없으며, TEMPORARY 뷰를 생성할 수 없습니다.

  • WITH CHECK OPTION은 뷰 수정 시 삽입된 데이터가 WHERE에서 설정한 조건을 충족하는지 확인하는 것을 의미합니다.
  • 단일 테이블을 기반으로 뷰 생성
  • MySQL은 단일 데이터 테이블에 대한 뷰를 생성할 수 있습니다.

  • 아래와 같이 test_db 데이터베이스에 있는 tb_students_info 테이블의 데이터를 확인하세요.
  • mysql> SELECT * FROM tb_students_info;
    +----+--------+---------+------+------+--------+------------+
    | id | name  | dept_id | age | sex | height | login_date |
    +----+--------+---------+------+------+--------+------------+
    | 1 | Dany  |    1 |  25 | F  |  160 | 2015-09-10 |
    | 2 | Green |    3 |  23 | F  |  158 | 2016-10-22 |
    | 3 | Henry |    2 |  23 | M  |  185 | 2015-05-31 |
    | 4 | Jane  |    1 |  22 | F  |  162 | 2016-12-20 |
    | 5 | Jim  |    1 |  24 | M  |  175 | 2016-01-15 |
    | 6 | John  |    2 |  21 | M  |  172 | 2015-11-11 |
    | 7 | Lily  |    6 |  22 | F  |  165 | 2016-02-26 |
    | 8 | Susan |    4 |  23 | F  |  170 | 2015-10-01 |
    | 9 | Thomas |    3 |  22 | M  |  178 | 2016-06-07 |
    | 10 | Tom  |    4 |  23 | M  |  165 | 2016-08-05 |
    +----+--------+---------+------+------+--------+------------+
    10 rows in set (0.00 sec)

    【예제 1】

  • tb_students_info 테이블에 view_students_info라는 뷰를 생성합니다. 입력 SQL문과 실행 결과는 다음과 같습니다.
  • mysql> CREATE VIEW view_students_info
      -> AS SELECT * FROM tb_students_info;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SELECT * FROM view_students_info;
    +----+--------+---------+------+------+--------+------------+
    | id | name  | dept_id | age | sex | height | login_date |
    +----+--------+---------+------+------+--------+------------+
    | 1 | Dany  |    1 |  25 | F  |  160 | 2015-09-10 |
    | 2 | Green |    3 |  23 | F  |  158 | 2016-10-22 |
    | 3 | Henry |    2 |  23 | M  |  185 | 2015-05-31 |
    | 4 | Jane  |    1 |  22 | F  |  162 | 2016-12-20 |
    | 5 | Jim  |    1 |  24 | M  |  175 | 2016-01-15 |
    | 6 | John  |    2 |  21 | M  |  172 | 2015-11-11 |
    | 7 | Lily  |    6 |  22 | F  |  165 | 2016-02-26 |
    | 8 | Susan |    4 |  23 | F  |  170 | 2015-10-01 |
    | 9 | Thomas |    3 |  22 | M  |  178 | 2016-06-07 |
    | 10 | Tom  |    4 |  23 | M  |  165 | 2016-08-05 |
    +----+--------+---------+------+------+--------+------------+
    10 rows in set (0.04 sec)

    기본적으로 생성된 뷰에는 기본 테이블과 동일한 필드가 있습니다. 뷰 필드 이름을 지정하여 뷰를 생성할 수도 있습니다.

  • 【예제 2】
  • tb_students_info 테이블에 v_students_info라는 뷰를 생성한다. 입력 SQL 문과 실행 결과는 다음과 같다.

    mysql> CREATE VIEW v_students_info
      -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)
      -> AS SELECT id,name,dept_id,age,sex,height,login_date
      -> FROM tb_students_info;
    Query OK, 0 rows affected (0.06 sec)
    mysql> SELECT * FROM v_students_info;
    +------+--------+------+-------+-------+----------+------------+
    | s_id | s_name | d_id | s_age | s_sex | s_height | s_date   |
    +------+--------+------+-------+-------+----------+------------+
    |  1 | Dany  |  1 |  24 | F   |   160 | 2015-09-10 |
    |  2 | Green |  3 |  23 | F   |   158 | 2016-10-22 |
    |  3 | Henry |  2 |  23 | M   |   185 | 2015-05-31 |
    |  4 | Jane  |  1 |  22 | F   |   162 | 2016-12-20 |
    |  5 | Jim  |  1 |  24 | M   |   175 | 2016-01-15 |
    |  6 | John  |  2 |  21 | M   |   172 | 2015-11-11 |
    |  7 | Lily  |  6 |  22 | F   |   165 | 2016-02-26 |
    |  8 | Susan |  4 |  23 | F   |   170 | 2015-10-01 |
    |  9 | Thomas |  3 |  22 | M   |   178 | 2016-06-07 |
    |  10 | Tom  |  4 |  23 | M   |   165 | 2016-08-05 |
    +------+--------+------+-------+-------+----------+------------+
    10 rows in set (0.01 sec)
  • view_students_info와 v_students_info 두 뷰의 필드 이름은 다르지만 데이터는 동일한 것을 볼 수 있습니다. 따라서 뷰를 사용할 때 사용자는 실제 테이블의 데이터는 물론이고 기본 테이블의 구조까지 이해할 필요가 없어 데이터베이스의 보안을 확보할 수 있다.

여러 테이블을 기반으로 뷰 생성

MySQL에서는 CREATE VIEW 문을 사용하여 두 개 이상의 테이블에 뷰를 생성할 수도 있습니다.

【예제 3】

tb_student_info 테이블과 tb_departments 테이블에 v_students_info 뷰를 생성합니다. 입력 SQL 문과 실행 결과는 다음과 같습니다.

mysql> CREATE VIEW v_students_info
  -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)
  -> AS SELECT id,name,dept_id,age,sex,height,login_date
  -> FROM tb_students_info;
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT * FROM v_students_info;
+------+--------+------+-------+-------+----------+------------+
| s_id | s_name | d_id | s_age | s_sex | s_height | s_date   |
+------+--------+------+-------+-------+----------+------------+
|  1 | Dany  |  1 |  24 | F   |   160 | 2015-09-10 |
|  2 | Green |  3 |  23 | F   |   158 | 2016-10-22 |
|  3 | Henry |  2 |  23 | M   |   185 | 2015-05-31 |
|  4 | Jane  |  1 |  22 | F   |   162 | 2016-12-20 |
|  5 | Jim  |  1 |  24 | M   |   175 | 2016-01-15 |
|  6 | John  |  2 |  21 | M   |   172 | 2015-11-11 |
|  7 | Lily  |  6 |  22 | F   |   165 | 2016-02-26 |
|  8 | Susan |  4 |  23 | F   |   170 | 2015-10-01 |
|  9 | Thomas |  3 |  22 | M   |   178 | 2016-06-07 |
|  10 | Tom  |  4 |  23 | M   |   165 | 2016-08-05 |
+------+--------+------+-------+-------+----------+------------+
10 rows in set (0.01 sec)
이 뷰를 통해 기본 테이블의 데이터를 안전하게 보호할 수 있습니다. 뷰에는 s_id, s_name 및 dept_name이 포함되며, s_id 필드는 tb_students_info 테이블의 id 필드에 해당하고, s_name 필드는 tb_students_info 테이블의 name 필드에 해당하며, dept_name 필드는 tb_departments 테이블의 dept_name 필드에 해당합니다.

Query view

뷰가 정의되면 데이터 테이블을 쿼리하는 것처럼 SELECT 문을 사용하여 뷰의 데이터를 쿼리할 수 있습니다. 구문은 기본 테이블의 데이터를 쿼리하는 것과 같습니다.

뷰는 주로 다음 측면에서 쿼리하는 데 사용됩니다.

뷰를 사용하여 검색된 데이터의 형식을 다시 지정합니다.

뷰를 사용하여 복잡한 테이블 조인을 단순화하세요.

보기를 사용하여 데이터를 필터링하세요.

DESCRIBE를 사용하여 뷰를 볼 수 있습니다. 구문은 다음과 같습니다.

DESCRIBE 뷰 이름;

[예제 4]

DESCRIBE 문을 통해 v_students_info 뷰의 정의를 봅니다. 실행 결과는 다음과 같습니다.

mysql> DESCRIBE v_students_info;
+----------+---------------+------+-----+------------+-------+
| Field  | Type     | Null | Key | Default  | Extra |
+----------+---------------+------+-----+------------+-------+
| s_id   | int(11)    | NO  |   | 0     |    |
| s_name  | varchar(45)  | YES |   | NULL    |    |
| d_id   | int(11)    | YES |   | NULL    |    |
| s_age  | int(11)    | YES |   | NULL    |    |
| s_sex  | enum(&#39;M&#39;,&#39;F&#39;) | YES |   | NULL    |    |
| s_height | int(11)    | YES |   | NULL    |    |
| s_date  | date     | YES |   | 2016-10-22 |    |
+----------+---------------+------+-----+------------+-------+
7 rows in set (0.04 sec)

참고: DESCRIBE는 일반적으로 DESC로 축약될 수 있습니다. 이 명령을 입력하면 실행 결과가 DESCRIBE를 입력하는 것과 같습니다.

위 내용은 mysql이 뷰를 생성할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.