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

溫馨提示×

溫馨提示×

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

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

MYSQL中怎么創建一個視圖

發布時間:2021-07-26 16:25:57 來源:億速云 閱讀:156 作者:Leah 欄目:數據庫

MYSQL中怎么創建一個視圖,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一. 視圖概述

視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,并且在引用視圖時動態生成。

對其中所引用的基礎表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。

視圖是存儲在數據庫中的查詢的sql 語句,它主要出于兩種原因:安全原因,視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使復雜的查詢易于理解和使用。

  視圖:查看圖形或文檔的方式。

  視圖是從一個或多個表或視圖中導出的表,其結構和數據是建立在對表的查詢基礎上的。和表一樣,視圖也是包括幾個被定義的數據列和多個數據行,但就本質而言這些數據列和數據行來源于其所引用的表。

  所以視圖不是真實存在的基礎表而是一張虛表,視圖所對應的數據并不實際地以視圖結構存儲在數據庫中,而是存儲在視圖所引用的表中。

  視圖一經定義便存儲在數據庫中,與其相對應的數據并沒有像表那樣又在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。

  當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中。

  視圖有很多優點,主要表現在:

  ?視點集中

  ?簡化操作

  ?定制數據

  ?合并分割數據

  ?安全性

二. 創建視圖——create view

1. 語法

create [or replace] [algorithm = {undefined | merge | temptable}] view [db_name.]view_name [(column_list)] as select_statement [with [cascaded | local] check option]

通過該語句可以創建視圖,若給定了[or replace],則表示當已具有同名的視圖時,將覆蓋原視圖。

select_statement是一個查詢語句,這個查詢語句可從表或其它的視圖中查詢。視圖屬于數據庫,因此需要指定數據庫的名稱,若未指定時,表示在當前的數據庫創建新視圖。

表和數據庫共享數據庫中相同的名稱空間,因此,數據庫不能包含相同名稱的表和視圖,并且,視圖的列名也不能重復。

2. 使用舉例

eg. 本例創建一個產品表(product)和一個購買記錄表(purchase),再通過視圖purchase_detail查詢出購買的詳細信息。

create table product

(

product_id int not null,

name varchar(50) not null,

price double not null

);

insert into product values(1, 'apple ', 5.5);

create table purchase

(

id int not null,

product_id int not null,

qty int not null default 0,

gen_time datetime not null

);

insert into purchase values(1, 1, 10, now());

create view purchase_detail as select product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

創建成功后,輸入:select * from purchase_detail;

運行效果如下:

+-------+-------+-----+-------------+

| name | price | qty | total_value |

+-------+-------+-----+-------------+

| apple | 5.5 | 10 | 55 |

+-------+-------+-----+-------------+

1 row in set (0.01 sec)

3. 注意事項

創建視圖存在如下注意事項:

(1) 運行創建視圖的語句需要用戶具有創建視圖(crate view)的權限,若加了[or replace]時,還需要用戶具有刪除視圖(drop view)的權限;

(2) select語句不能包含from子句中的子查詢;

(3) select語句不能引用系統或用戶變量;

(4) select語句不能引用預處理語句參數;

(5) 在存儲子程序內,定義不能引用子程序參數或局部變量;

(6)在定義中引用的表或視圖必須存在。但是,創建了視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用check table語句;

(7) 在定義中不能引用temporary表,不能創建temporary視圖;

(8) 在視圖定義中命名的表必須已存在;

(9) 不能將觸發程序與視圖關聯在一起;

(10) 在視圖定義中允許使用order by,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己order by的語句,它將被忽略。

三. 修改視圖——alter view

1. 語法

alter [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]該語句用于更改已有視圖的定義。其語法與create view類似。

2. 使用舉例

eg. 將上一小節中中創建的視purchase_detail進行修改,去掉qty列,語句如下:

alter view purchase_detail as select product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

此時通過語句:select * from purchase_detail;對視圖進行查詢時,結果如下:

+-------+-------+-------------+

關于MYSQL中怎么創建一個視圖問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

西峡县| 建德市| 缙云县| 南安市| 寿光市| 枣阳市| 嘉峪关市| 阳春市| 武清区| 汉阴县| 化德县| 泾川县| 兴国县| 彭州市| 白朗县| 广平县| 襄汾县| 苏州市| 偃师市| 瑞昌市| 沂水县| 浮梁县| 永康市| 孙吴县| 巍山| 德昌县| 新龙县| 毕节市| 连平县| 浙江省| 辽阳市| 定结县| 宜春市| 容城县| 林州市| 苗栗市| 南昌市| 禄丰县| 潍坊市| 且末县| 麻阳|