欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL高級(jí)開(kāi)發(fā)中視圖的詳細(xì)教程

 更新時(shí)間:2023年01月09日 10:36:10   作者:愛(ài)吃豆的土豆  
對(duì)MySQL數(shù)據(jù)庫(kù)的查詢,除了基本的查詢外,有時(shí)候需要對(duì)查詢的結(jié)果集進(jìn)行處理,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)基本SQL語(yǔ)句教程之高級(jí)操作中視圖的相關(guān)資料,需要的朋友可以參考下

1.介紹

視圖(View)是一種虛擬存在的表。視圖中的數(shù)據(jù)并不在數(shù)據(jù)庫(kù)中實(shí)際存在,行和列數(shù)據(jù)來(lái)自定義視 圖的查詢中使用的表,并且是在使用視圖時(shí)動(dòng)態(tài)生成的。

通俗的講,視圖只保存了查詢的SQL邏輯,不保存查詢結(jié)果。所以我們?cè)趧?chuàng)建視圖的時(shí)候,主要的工作 就落在創(chuàng)建這條SQL查詢語(yǔ)句上。

2.語(yǔ)法

1). 創(chuàng)建

CREATE [OR REPLACE] VIEW 視圖名稱(chēng)[(列名列表)] AS SELECT語(yǔ)句 [ WITH [
CASCADED | LOCAL ] CHECK OPTION ]

2). 查詢

查看創(chuàng)建視圖語(yǔ)句:SHOW CREATE VIEW 視圖名稱(chēng);
查看視圖數(shù)據(jù):SELECT * FROM 視圖名稱(chēng) ...... ;

3). 修改

方式一:CREATE [OR REPLACE] VIEW 視圖名稱(chēng)[(列名列表)] AS SELECT語(yǔ)句 [ WITH
[ CASCADED | LOCAL ] CHECK OPTION ]
方式二:ALTER VIEW 視圖名稱(chēng)[(列名列表)] AS SELECT語(yǔ)句 [ WITH [ CASCADED |
LOCAL ] CHECK OPTION ]

4). 刪除

 DROP VIEW [IF EXISTS] 視圖名稱(chēng) [,視圖名稱(chēng)] ...

演示示例:

-- 創(chuàng)建視圖
create or replace view stu_v_1 as select id,name from student where id <= 10;
-- 查詢視圖
show create view stu_v_1;
select * from stu_v_1;
select * from stu_v_1 where id < 3;
-- 修改視圖
create or replace view stu_v_1 as select id,name,no from student where id <= 10;
alter view stu_v_1 as select id,name from student where id <= 10;
-- 刪除視圖
drop view if exists stu_v_1;

上述我們演示了,視圖應(yīng)該如何創(chuàng)建、查詢、修改、刪除,那么我們能不能通過(guò)視圖來(lái)插入、更新數(shù)據(jù) 呢? 接下來(lái),做一個(gè)測(cè)試。

create or replace view stu_v_1 as select id,name from student where id <= 10 ;
select * from stu_v_1;
insert into stu_v_1 values(6,'Tom');
insert into stu_v_1 values(17,'Tom22');

執(zhí)行上述的SQL,我們會(huì)發(fā)現(xiàn),id為6和17的數(shù)據(jù)都是可以成功插入的。 但是我們執(zhí)行查詢,查詢出 來(lái)的數(shù)據(jù),卻沒(méi)有id為17的記錄。

因?yàn)槲覀冊(cè)趧?chuàng)建視圖的時(shí)候,指定的條件為 id<=10, id為17的數(shù)據(jù),是不符合條件的,所以沒(méi)有查 詢出來(lái),但是這條數(shù)據(jù)確實(shí)是已經(jīng)成功的插入到了基表中。

如果我們定義視圖時(shí),如果指定了條件,然后我們?cè)诓迦搿⑿薷?、刪除數(shù)據(jù)時(shí),是否可以做到必須滿足 條件才能操作,否則不能夠操作呢? 答案是可以的,這就需要借助于視圖的檢查選項(xiàng)了。

3.檢查選項(xiàng)

當(dāng)使用WITH CHECK OPTION子句創(chuàng)建視圖時(shí),MySQL會(huì)通過(guò)視圖檢查正在更改的每個(gè)行,例如 插 入,更新,刪除,以使其符合視圖的定義。 MySQL允許基于另一個(gè)視圖創(chuàng)建視圖,它還會(huì)檢查依賴視 圖中的規(guī)則以保持一致性。為了確定檢查的范圍,mysql提供了兩個(gè)選項(xiàng):

CASCADED 和 LOCAL ,默認(rèn)值為 CASCADED 。

1). CASCADED

級(jí)聯(lián)。 比如,v2視圖是基于v1視圖的,如果在v2視圖創(chuàng)建的時(shí)候指定了檢查選項(xiàng)為 cascaded,但是v1視圖 創(chuàng)建時(shí)未指定檢查選項(xiàng)。 則在執(zhí)行檢查時(shí),不僅會(huì)檢查v2,還會(huì)級(jí)聯(lián)檢查v2的關(guān)聯(lián)視圖v1。

2). LOCAL

本地。

比如,v2視圖是基于v1視圖的,如果在v2視圖創(chuàng)建的時(shí)候指定了檢查選項(xiàng)為 local ,但是v1視圖創(chuàng) 建時(shí)未指定檢查選項(xiàng)。 則在執(zhí)行檢查時(shí),知會(huì)檢查v2,不會(huì)檢查v2的關(guān)聯(lián)視圖v1。

4.視圖的更新

要使視圖可更新,視圖中的行與基礎(chǔ)表中的行之間必須存在一對(duì)一的關(guān)系。如果視圖包含以下任何一 項(xiàng),則該視圖不可更新:

A. 聚合函數(shù)或窗口函數(shù)(SUM()、 MIN()、 MAX()、 COUNT()等)

B. DISTINCT

C. GROUP BY

D. HAVING

E. UNION 或者 UNION ALL

示例演示:

create view stu_v_count as select count(*) from student;

上述的視圖中,就只有一個(gè)單行單列的數(shù)據(jù),如果我們對(duì)這個(gè)視圖進(jìn)行更新或插入的,將會(huì)報(bào)錯(cuò)。

insert into stu_v_count values(10);

5.視圖作用

1). 簡(jiǎn)單

視圖不僅可以簡(jiǎn)化用戶對(duì)數(shù)據(jù)的理解,也可以簡(jiǎn)化他們的操作。那些被經(jīng)常使用的查詢可以被定義為視 圖,從而使得用戶不必為以后的操作每次指定全部的條件。

2). 安全

數(shù)據(jù)庫(kù)可以授權(quán),但不能授權(quán)到數(shù)據(jù)庫(kù)特定行和特定的列上。通過(guò)視圖用戶只能查詢和修改他們所能見(jiàn) 到的數(shù)據(jù) 1 create view stu_v_count as select count(*) from student; 1 insert into stu_v_count values(10);

3). 數(shù)據(jù)獨(dú)立 視圖可幫助用戶屏蔽真實(shí)表結(jié)構(gòu)變化帶來(lái)的影響。

6.案例

1). 為了保證數(shù)據(jù)庫(kù)表的安全性,開(kāi)發(fā)人員在操作tb_user表時(shí),只能看到的用戶的基本字段,屏蔽 手機(jī)號(hào)和郵箱兩個(gè)字段。

create view tb_user_view as select id,name,profession,age,gender,status,createtime
from tb_user;
select * from tb_user_view;

2). 查詢每個(gè)學(xué)生所選修的課程(三張表聯(lián)查),這個(gè)功能在很多的業(yè)務(wù)中都有使用到,為了簡(jiǎn)化操 作,定義一個(gè)視圖。

create view tb_stu_course_view as select s.name student_name , s.no student_no ,
c.name course_name from student s, student_course sc , course c where s.id =
sc.studentid and sc.courseid = c.id;
select * from tb_stu_course_view;

到此這篇關(guān)于MySQL高級(jí)開(kāi)發(fā)中視圖的詳細(xì)教程的文章就介紹到這了,更多相關(guān)MySQL視圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論