首頁 >資料庫 >mysql教程 >mysql如何建立視圖?創建語句是什麼?

mysql如何建立視圖?創建語句是什麼?

青灯夜游
青灯夜游原創
2020-10-13 16:11:5219560瀏覽

在mysql中,可以使用「CREATE VIEW」語句來建立視圖,語法格式為「CREATE VIEW 844bf6655e3e4ec39d7cdc4c8308aa61 AS 8add5b128149620196e85cf4451dab4a」;其中「8add5b128149620196e85cf4451dab4a 」不能包含FROM子句中的子查詢,不能引用預處理語句參數。 语句>语句>

mysql如何建立視圖?創建語句是什麼?

(推薦教學:mysql影片教學

建立視圖是指在已經存在的MySQL 資料庫表上建立視圖。視圖可以建立在一張表中,也可以建立在多張表中。

基本語法

可以使用 CREATE VIEW 語句來建立視圖。

語法格式如下:

CREATE VIEW <视图名> AS <SELECT语句>

語法說明如下。

  • 844bf6655e3e4ec39d7cdc4c8308aa61:指定視圖的名稱。該名稱在資料庫中必須是唯一的,不能與其他表或視圖同名。

  • 8add5b128149620196e85cf4451dab4a:指定建立檢視的 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 字段。

以上是mysql如何建立視圖?創建語句是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn