中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在MySQL中創建視圖的方法

發布時間:2020-08-14 13:36:07 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

這篇文章主要介紹了在MySQL中創建視圖的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

基本語法

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

語法格式如下:

CREATE VIEW <視圖名> AS <SELECT語句>

語法說明如下。

  • <視圖名>:指定視圖的名稱。該名稱在數據庫中必須是唯一的,不能與其他表或視圖同名。
  • <SELECT語句>:指定創建視圖的 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 字段。

查詢視圖

視圖一經定義之后,就可以如同查詢數據表一樣,使用 SELECT 語句查詢視圖中的數據,語法和查詢基礎表的數據一樣。

視圖用于查詢主要應用在以下幾個方面:

  • 使用視圖重新格式化檢索出的數據。
  • 使用視圖簡化復雜的表連接。
  • 使用視圖過濾數據。

DESCRIBE 可以用來查看視圖,語法如下:

DESCRIBE 視圖名;

【實例 4】

通過 DESCRIBE 語句查看視圖 v_students_info 的定義,輸入的 SQL 語句和執行結果如下所示。

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('M','F') | 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中創建視圖的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

堆龙德庆县| 黄浦区| 伊通| 仪陇县| 深圳市| 集贤县| 巩留县| 曲阜市| 连江县| 泸定县| 泊头市| 嵊泗县| 麻城市| 华池县| 清水河县| 北流市| 宜兰县| 平陆县| 宝清县| 本溪市| 喀喇沁旗| 额尔古纳市| 凤台县| 莱西市| 通许县| 大田县| 阜平县| 仲巴县| 松滋市| 通化市| 隆德县| 望谟县| 宁都县| 伊吾县| 长宁区| 松潘县| 杭锦后旗| 石渠县| 闻喜县| 滨州市| 九龙县|