本文目錄一覽:
mysql 視圖
1、什麼是視圖
視圖:MySQL從5.0.1版本開始提供視圖功能。一種虛擬存在的表,行和列的數據來自定義視圖的查詢中使用的表,並且是在使用視圖時動態生成的,只保存了sql邏輯,不保存查詢結果
2、視圖應用場景
多個地方用到同樣的查詢結果該查詢結果使用的sql語句較複雜
4、視圖的好處
使用簡單安全數據獨立
5、創建或者修 改視圖
創建視圖的語法:
修改視圖的語法
6、視圖更新性
視圖的可更新性和視圖中查詢的定義有關係,以下類型的視圖是不能更新的。(1)包含以下關鍵字的sql語句:分組函數、distinct、group by、having、union或者union all(2)常量視圖(3)Select中包含子查詢(4)join(5)from一個不能更新的視圖(6)where子句的子查詢引用了from子句中的表
7、刪除視圖的語法
用戶可以一次刪除一個或者多個視圖,前提是必須有該視圖的drop許可權。
8、查看視圖結構的語法
show tables;如果需要查詢某個視圖的定義,可以使用show create view命令進行查看
MySQL視圖
使用示例
使用示例
使用示例
檢查選項的使用
mysql是可以基於視圖創建視圖,它會檢查視圖所依賴的視圖的規則
如果再基於v2創建視圖v3,v3沒有定義檢查選項,則此時向v3中插入數據時,不會檢查是否滿足v3的條件,但是會檢查是否滿足v2和v1的條件
local選項相比於cascaded,不會自動向上添加選項
如創建一個視圖,此時視圖中只包含一條數據
例如,現要查詢每個學生選修的課程(多對多,三張表),將SQL保存到視圖,以後再想查詢,直接select * from 視圖即可
如何在MySQL中利用資料庫表創建視圖
為了不影響其他的資料庫表,新建一張資料庫表t_worker_info,代碼如下:
create
table
t_worker_info(
id
int(8)
primary
key
not
null
auto_increment,
w_id
int(10)
not
null,
w_name
varchar(20)
not
null,
w_age
int(3),
w_sex
varchar(10),
w_birth
varchar(20)
);
創建t_worker_info後,查看一下數據結構,代碼如下:
desc
t_worker_info;
雙擊選中的資料庫,在views滑鼠右鍵「create
view…」,打開編輯窗口,並在窗口中輸入代碼,代碼如下:
create
view
`view_worker_info`
as
select
*
from
t_worker_info;
查看創建視圖的基本信息,利用desc或describe語句,代碼如下:
desc
view_worker_info;
查看視圖信息,如存儲引擎、數據長度等,如果上述指標都為null,說明視圖是虛表,代碼如下:
show
table
status
like
‘view_worker_info’;
查看創建視圖的詳細信息,需要用到show
create
view
視圖名,代碼如下:
show
create
view
view_worker_info;
mysql視圖的作用是什麼
視圖是從一個或多個表中查詢出來的數據保存為視圖,是一種虛擬存在的表。
注意:
資料庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中。
使用視圖查詢數據時,資料庫系統會從原來的表中取出對應的數據。
視圖中的數據依賴於原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變。
2、為什麼要使用視圖
重複利用SQL語句
簡化SQL查詢,快速取數據
只用知道表的部分結構
保護數據,根據特定授權(分配用戶一定許可權,安全性)
更改數據格式,視圖可返回與底層表的格式不同的數據表,展現出來。
3、視圖與表的區別:
表要佔用磁碟空間,視圖不需要
視圖不能添加索引
使用視圖可以簡化查詢
視圖可以提高安全性
4 .創建視圖
CREATE VIEW語法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
解釋::
OR REPLACE: 替換重複視圖名(可選)
ALGORITHM:可選的ALGORITHM子句是對標準SQL的MySQL擴展
可取三個值:MERGE、TEMPTABLE或UNDEFINED。如果沒有ALGORITHM子句,默認演算法是UNDEFINED(未定義的)。演算法會影響MySQL處理視圖的方式。
對於MERGE,會將引用視圖的語句的文本與視圖定義合併起來,使得視圖定義的某一部分取代語句的對應部分。
對於TEMPTABLE,視圖的結果將被置於臨時表中,然後使用它執行語句。
對於UNDEFINED,MySQL將選擇所要使用的演算法。如果可能,它傾向於MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。
明確選擇TEMPTABLE的1個原因在於,創建臨時表之後、並在完成語句處理之前,能夠釋放基表上的鎖定。與MERGE演算法相比,鎖定釋放的速度更快,這樣,使用視圖的其他客戶端不會被屏蔽過長時間。
mysql 資料庫怎麼創建視圖
在查詢頁面用語句創建就可以。
1、打開Navicat for MySQL,並登錄到指定資料庫。
2、點擊上方查詢。
3、點擊新建查詢。
4、在空白處寫上視圖創建語句,點擊左上方執行即可。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269991.html