新聞中心
以下的文章主要是對MySQL視圖的描述,其中包括MySQ視圖L概述,以及創(chuàng)建MySQL視圖—create view與修改MySQL視圖——alter view等相關(guān)內(nèi)容的具體描述,以下就是文章的具體內(nèi)容介紹。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、豐南網(wǎng)絡(luò)推廣、微信小程序、豐南網(wǎng)絡(luò)營銷、豐南企業(yè)策劃、豐南品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供豐南建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
一. 視圖概述
MySQL視圖是一個虛擬表,其內(nèi)容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時動態(tài)生成。
對其中所引用的基礎(chǔ)表來說,MySQL視圖的作用類似于篩選。定義視圖的篩選可以來自當(dāng)前或其它數(shù)據(jù)庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數(shù)據(jù)修改時的限制也很少。
視圖是存儲在數(shù)據(jù)庫中的查詢的sql 語句,它主要出于兩種原因:安全原因,視圖可以隱藏一些數(shù)據(jù),如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數(shù)等,另一原因是可使復(fù)雜的查詢易于理解和使用。
MySQL視圖:查看圖形或文檔的方式。
視圖是從一個或多個表或視圖中導(dǎo)出的表,其結(jié)構(gòu)和數(shù)據(jù)是建立在對表的查詢基礎(chǔ)上的。和表一樣,視圖也是包括幾個被定義的數(shù)據(jù)列和多個數(shù)據(jù)行,但就本質(zhì)而言這些數(shù)據(jù)列和數(shù)據(jù)行來源于其所引用的表。
所以MySQL視圖不是真實存在的基礎(chǔ)表而是一張?zhí)摫恚晥D所對應(yīng)的數(shù)據(jù)并不實際地以視圖結(jié)構(gòu)存儲在數(shù)據(jù)庫中,而是存儲在視圖所引用的表中。
視圖一經(jīng)定義便存儲在數(shù)據(jù)庫中,與其相對應(yīng)的數(shù)據(jù)并沒有像表那樣又在數(shù)據(jù)庫中再存儲一份,通過視圖看到的數(shù)據(jù)只是存放在基本表中的數(shù)據(jù)。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。
當(dāng)對通過視圖看到的數(shù)據(jù)進行修改時,相應(yīng)的基本表的數(shù)據(jù)也要發(fā)生變化,同時,若基本表的數(shù)據(jù)發(fā)生變化,則這種變化也可以自動地反映到視圖中。
視圖有很多優(yōu)點,主要表現(xiàn)在:
視點集中
簡化操作
定制數(shù)據(jù)
合并分割數(shù)據(jù)
安全性
二. 創(chuàng)建MySQL視圖——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]通過該語句可以創(chuàng)建視圖,若給定了[or replace],則表示當(dāng)已具有同名的視圖時,將覆蓋原視圖。select_statement是一個查詢語句,這個查詢語句可從表或其它的視圖中查詢。視圖屬于數(shù)據(jù)庫,因此需要指定數(shù)據(jù)庫的名稱,若未指定時,表示在當(dāng)前的數(shù)據(jù)庫創(chuàng)建新視圖。
表和數(shù)據(jù)庫共享數(shù)據(jù)庫中相同的名稱空間,因此,數(shù)據(jù)庫不能包含相同名稱的表和視圖,并且,視圖的列名也不能重復(fù)。
2. 使用舉例
eg. 本例創(chuàng)建一個產(chǎn)品表(product)和一個購買記錄表(purchase),再通過MySQL視圖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;
創(chuàng)建成功后,輸入:select * from purchase_detail;
運行效果如下:
- +-------+-------+-----+-------------+
- | name | price | qty | total_value |
- +-------+-------+-----+-------------+
- | apple | 5.5 | 10 | 55 |
- +-------+-------+-----+-------------+
- 1 row in set (0.01 sec)
3. 注意事項
創(chuàng)建視圖存在如下注意事項:
(1) 運行創(chuàng)建視圖的語句需要用戶具有創(chuàng)建視圖(crate view)的權(quán)限,若加了[or replace]時,還需要用戶具有刪除視圖(drop view)的權(quán)限;
(2) select語句不能包含from子句中的子查詢;
(3) select語句不能引用系統(tǒng)或用戶變量;
(4) select語句不能引用預(yù)處理語句參數(shù);
(5) 在存儲子程序內(nèi),定義不能引用子程序參數(shù)或局部變量;
(6)在定義中引用的表或視圖必須存在。但是,創(chuàng)建了MySQL視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用check table語句;
(7) 在定義中不能引用temporary表,不能創(chuàng)建temporary視圖;
(8) 在視圖定義中命名的表必須已存在;
(9) 不能將觸發(fā)程序與視圖關(guān)聯(lián)在一起;
(10) 在視圖定義中允許使用order by,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己order by的語句,它將被忽略。
三. 修改MySQL視圖——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. 將上一小節(jié)中中創(chuàng)建的視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;
以上的相關(guān)內(nèi)容就是對MySQL視圖的介紹,望你能有所收獲。
本文標(biāo)題:MySQL視圖的概念與實際應(yīng)用
當(dāng)前地址:http://fisionsoft.com.cn/article/copehhh.html


咨詢
建站咨詢
