1.初識視圖
1.視圖的概念和作用
什么是視圖:是從一個或多個表中匯出來的表,它是一種虛擬存在的表,表的結構和資料都依賴于基本表,
作用:
簡化查詢陳述句:簡化用戶的查詢操作,使查詢更加快捷,
安全性:更方便的進行權限控制,
邏輯資料獨立性:屏蔽真實表結構變化帶來的影響,
2.創建視圖語法
CREATE[OR REPLACE][ALGORITHM = {UNDEFINED |MERGE│TEMPTABLE]
[DEFINER= { user | CURRENT_USER]
[SQL SECURITY { DEFINER | INVOKER}]
VIEW view_name [(column_list)]
AS select_statement
[WITH[CASCADED|LOCAL]CHECK OPTION]
- CREATE:表示創建視圖的關鍵字,
- OR REPLACE:可選,表示替換已有視圖,
- ALGORITHM:可選,表示視圖演算法,會影響查詢陳述句的決議方式,
ALGORITHM取值有如下3個:
UNDEFINED:默認,由MySQL自動選擇演算法,
MERGE:將select_statement和查詢視圖時的SELECT陳述句合并起來
查詢,
TEMPTABLE:先將select_statement的查詢結果存入臨時表,然后用
臨時表進行查詢,
- DEFINER:可選,表示定義視圖的用戶,與安全控制有關,默認為當前用戶,
- SQL SECURITY:可選,用于視圖的安全控制,
SQL SECURITY取值有如下2個:
DEFINER:默認,由定義者指定的用戶的權限來執行,
INVOKER:由呼叫視圖的用戶的權限來執行,
- view_name:表示要創建的視圖名稱,
- column_list:可選,用于指定視圖中的各個列的名稱,(默認與SELECT陳述句查詢的列相同)
- AS:表示視圖要執行的操作,
- select_statement:一個完整的查詢陳述句,表示從某些表或視圖中查出某些滿足條件的記錄,將這些記錄匯入視圖中,
- WITH CHECK OPTION:可選,用于視圖資料操作時的檢查條件,若省略此子句,則不進行檢查,
取值:
CASCADED:默認,操作資料時要滿足所有相關視圖和表定義的條件,例如,當在一個視圖的基礎上創建另一個視圖時,進行級聯檢查,
LOCAL:操作資料時滿足該視圖本身定義的條件即可,
2.視圖管理
1.創建視圖
在多表上創建視圖
#創建視圖
mysql> CREATE VIEW view_goods_cate As
->SELECT g.id,g.name,c.name category_name FROM sh_goods
->LEFT JOIN sh_goods_category c
-> ON g.category_id = c.id;
Query OK,0 rows affected (o.01 sec)
#查詢視圖
mysql> SELECT * FROM view_goods_cate LIMIT 3;
十————十————————十——————————十
| id l namel category_namel
十————十————————十——————————十
| 1 | 2B鉛筆| 文具 |
| 2 | 鋼筆 | 文具 |
| 3 | 碳素筆| 文具 |
十————十————————十——————————十
3 rows in set (o.00 sec)
自定義列名稱
#創建視圖
mysq1> CREATE VIEW view_ goods_ promo (sn, title, promotion_ _price) AS
-> SELECT id, name, price*0.8 FROM sh_ goods;

#②查詢視圖
mysq1> SELECT * FROM view goods_ promo WHERE sn <= 3;

在創建視圖時,自定義列名稱的順序與AS后SELECT欄位串列的順序一-致,
自定義列名稱的數量必須與SELECT欄位串列的數量- -致,
2.查看視圖
1.查看視圖欄位資訊
mysq1> DESC view_ goods_ cate;

2.查看視圖狀態資訊
mysq1> SHOW TABLE STATUS LIKE 'view_ goods_ cate' \G

3.查看創建視圖的陳述句
mysql> SHOW CREATE VIEW view_ goods_ cate \G .

3.修改視圖
修改視圖:修改資料庫中存在的視圖的定義,
例如,當基本表中的某些欄位發生變化時,視圖必須修改才能正常使用,
1.替換已有的視圖
#創建視圖
mysql> CREATE VIEW view_ goods AS
-> SELECT id, name, price FROM sh_ goods;
Query OK, 0 rows affected (0.01 sec)

#修改已有視圖
mysql> CREATE OR REPLACE VIEW view_ goods AS
-> SELECT id, name FROM sh_ goods;

#查看修改結果
mysql> DESC view_ goods;

修改視圖語法
ALTER [AL GORITHM = {UNDEFINED | MERGE| TEMPTABLE}]
[DEFINER = { user | CURRENT_ _USER }]
[SQL SECURITY { DEFINER |INVOKER }]
VIEW view_ name [(column_ list)]
AS SELECT_ statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
使用方法如下所示:
#修改視圖
mysql> ALTER VIEW view_ goods AS SELECT id FROM sh_ goods;

#查看修改結果
mysql> DESC view_ goods;

4.修改視圖
DROP VIEW [IF EXISTS] view_ name [,view_ name1]...
使用方法如下圖所示:
#洗掉視圖
mysql> DROP VIEW view_goods;
Query OK, 0 rows affected (0.00 sec)
#檢查視圖是否已被洗掉
mysql> SELECT * FROM view_goods;
ERROR 1146 (42S02) : Table 'shop. view_ goods' doesn't exist
3.視圖資料操作
1.添加資料
使用INSERT陳述句通過視圖向基本表添加資料
#創建視圖
mysql> CREATE VIEW view_ category AS
-> SELECT id, name FROM sh_goods_category;
Query OK, 0 rows affected (0.01 sec)
#添加資料
mysql> INSERT INTO view_ category VALUES (17, '圖書') ;
Query OK,1 row affected (0.00 sec)
#查詢添加后的資料
mysql> SELECT id, name FROM sh_ goods_ category WHERE id = 17;

2.修改資料
使用UPDATE陳述句通過視圖修改基本表中的資料
#修改資料
mysql> UPDATE view_category SET name = '家電' WHERE id = 17;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#查詢修改后的資料
mysql> SELECT id, name FROM sh_ goods_ category WHERE id = 17;

3.修改資料
使用DELETE陳述句通過視圖洗掉基本表中的資料
#洗掉資料
mysql> DELETE FROM view_category WHERE id = 17;
Query OK, 1 row affected (0.00 sec)
#查詢資料是否已經洗掉
mysql> SELECT id, name FROM sh_goods_category WHERE id = 17;
Empty set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/132008.html
標籤:其他
上一篇:MySQL最全136道面試題+筆記+導圖整理,面試大廠不再被MySql難倒
下一篇:滑鼠移入前后效果怎么做
