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

淺析Mysql中的視圖

 更新時間:2023年05月22日 08:37:10   作者:九月木碼  
這篇文章主要介紹了淺析Mysql中的視圖,視圖是從一個或者多個表中導(dǎo)出的表,視圖的行為與表非常相似,在視圖中用戶可以使用SELECT語句查詢數(shù)據(jù),以及使用INSERT、UPDATE和DELETE修改記錄,需要的朋友可以參考下

什么是視圖

數(shù)據(jù)庫中的視圖是一個虛擬表。視圖是從一個或者多個表中導(dǎo)出的表,視圖的行為與表非常相似,在視圖中用戶可以使用SELECT語句查詢數(shù)據(jù),以及使用INSERT、UPDATE和DELETE修改記錄。視圖可以使用戶操作方便,而且可以保障數(shù)據(jù)庫系統(tǒng)安全。

視圖一經(jīng)定義便存儲在數(shù)據(jù)庫中,與其相對應(yīng)的數(shù)據(jù)并沒有像表那樣在數(shù)據(jù)庫中再存儲一份,通過視圖看到的數(shù)據(jù)只是存放在基本表中的數(shù)據(jù)。當(dāng)對通過視圖看到的數(shù)據(jù)進(jìn)行修改時,相應(yīng)的基本表中的數(shù)據(jù)也要發(fā)生變化;同時,若基本表的數(shù)據(jù)發(fā)生變化,那么這種變化也自動地反映到視圖中。

下面創(chuàng)建兩個表:

CREATE TABLE teacher
(
    teacherId INT,
    teacherName    VARCHAR(40)
);
CREATE TABLE teacherinfo
(
    teacherId INT,
    teacherAddr VARCHAR(40),
    teacherPhone    VARCHAR(20)
);

創(chuàng)建視圖

創(chuàng)建視圖使用CREATE VIEW語法,基本語法格式如下:

CREATE[OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCASDED | LOCAL] CHECK OPTION]

解釋一下:

1、CREATE表示創(chuàng)建新視圖。REPLACE表示替換已經(jīng)創(chuàng)建的視圖

2、ALGORITHM表示視圖選擇的算法,UNDEFINED表示MySQL自動選擇算法,MERGE表示將使用的視圖語句與視圖定義合并起來,TEMPTABLE表示將視圖的結(jié)果存入臨時表,然后用臨時表來執(zhí)行語句

3、view表示視圖的名稱

4、column_list為屬性列

5、SELECT_statement表示SELECT語句

6、CASCADED與LOCAL為可選參數(shù),CASCADED為默認(rèn)值,表示更新視圖時要滿足所有相關(guān)視圖和表的條件;LOCAL則表示更新視圖時滿足該視圖本身定義即可

該語句要求具有針對視圖的CREATE VIEW權(quán)限,以及針對由SELECT語句選擇的每一列上的某些權(quán)限。對于在SELECT語句中其他地方使用的列,必須具有SELECT權(quán)限,如果還有OR REPLACE子句,必須在仕途上具有DROP權(quán)限。另外,視圖屬于數(shù)據(jù)庫,在默認(rèn)情況下,將在當(dāng)前數(shù)據(jù)庫創(chuàng)建新的視圖,如果想在給定數(shù)據(jù)庫中明確創(chuàng)建視圖,創(chuàng)建時應(yīng)將名稱指定為db_name.view_name。

1、在單表上創(chuàng)建視圖

比方說teacherinfo這張表我只需要teacherId和teacherPhone兩個字段,那么:

CREATE VIEW view_teacherinfo(view_teacherId, view_teacherPhone)
 AS SELECT teacherId, teacherPhone from teacherinfo;

因為默認(rèn)創(chuàng)建視圖的字段和原表的字段是一樣的,我這里指定視圖的字段名稱了。我現(xiàn)在往view_teacherinfo里面插入兩個字段:

insert into view_teacherinfo values('111', '222');
commit;

說明視圖中的字段發(fā)生變化,原表中的字段也發(fā)生了變化,證明了前面的結(jié)論,反之也是。

2、在多表上創(chuàng)建視圖

比方說我現(xiàn)在需要teacherId、teacherName、teacherPhone三個字段了,可以這么創(chuàng)建視圖:

CREATE VIEW view_teacherunion(view_teacherId, view_teacherName, view_teacherPhone) 
AS SELECT teacher.teacherId, teacher.teacherName, teacherinfo.teacherPhone
FROM teacher, teacherinfo WHERE teacher.teacherId = teacherinfo.teacherId;

很簡單,只是把表連一下而已

使用視圖的作用

上面創(chuàng)建了視圖了,看到與直接從數(shù)據(jù)表中讀取相比,視圖有以下優(yōu)點:

  • 1、簡單化

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

  • 2、安全性

      通過視圖,用戶只能查詢和修改他們所能看見的數(shù)據(jù),數(shù)據(jù)庫中的其他數(shù)據(jù)則既看不見也取不到。數(shù)據(jù)庫授權(quán)命令可以使每個用戶對數(shù)據(jù)庫的檢索限制到特定的數(shù)據(jù)庫對象上,但不能授權(quán)到數(shù)據(jù)庫特定行和特定列上。通過視圖,用戶可以被限制在數(shù)據(jù)的不同子集上:

(1)使用權(quán)限可被限制在基表的行的子集上

(2)使用權(quán)限可被限制在基表的列的子集上

(3)使用權(quán)限可被限制在基表的行和列的子集上

(4)使用權(quán)限可被限制在多個基表的連接所限定的行上

(5)使用權(quán)限可被限制在基表的數(shù)據(jù)的統(tǒng)計匯總上

(6)使用權(quán)限可被限制在另一個視圖的一個子集上,或是一些視圖和基表合并后的子集上

  • 3、邏輯數(shù)據(jù)獨立性

視圖可以幫助用戶屏蔽真實表結(jié)果變化帶來的影響

查看、修改、刪除視圖

1、DESCRIBE查看視圖基本信息

DESCRIBE語句查看視圖基本信息的語法為:

DESCRIBE 視圖名;

比如:

DESCRIBE view_teacherinfo

結(jié)果顯示出來視圖的字段定義、字段的數(shù)據(jù)類型、是否為空、是否為主/外鍵、默認(rèn)值和額外信息。上面的命令,寫成DESC也行

2、SHOW TABLE STATUS查看視圖信息

SHOW TABLE STATUS也可以用來查看視圖信息,基本語法為:

SHOW TABLE STATUS LIKE '視圖名'

比如:

SHOW TABLE STATUS LIKE 'view_teacherinfo'

后面還有些字段就不列出來了

3、SHOW CREATE VIEW查看視圖信息

SHOW CREATE VIEW也可以用來查看視圖信息,基本語法為:

SHOW CREATE VIEW 視圖名;

比如:

SHOW CREATE VIEW view_teacherinfo;

沒有列完整,不過可以看到Create View字段把創(chuàng)建視圖的語法給列出來了

4、修改視圖

修改視圖,就不細(xì)說了,因為修改視圖的語法和創(chuàng)建視圖的語法是完全一樣的。當(dāng)視圖已經(jīng)存在時,修改語句可以對視圖進(jìn)行修改;當(dāng)視圖不存在時,創(chuàng)建視圖

5、刪除視圖

當(dāng)視圖不再需要時,可以刪除視圖,刪除一個或者多個視圖可以使用DROP VIEW語句,基本語法為:

DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

其中,view_name是要刪除的視圖名稱,可以添加多個需要刪除的視圖名稱,名稱和名稱之間使用逗號分隔開,刪除視圖必須擁有DROP權(quán)限。比如:

DROP VIEW IF EXISTS view_teacherinfo, view_teacherunion;

看到,這樣就把view_teacherinfo和view_teacherunion兩個視圖刪除了,因為加了IF EXISTS,所以即使刪除視圖出錯了(比方說視圖名字寫錯了),MySQL也不會提示錯誤,大不了沒東西刪除罷了

MySQL中視圖和表的區(qū)別

最后總結(jié)一下MySQL中視圖和表的區(qū)別:

1、視圖是已經(jīng)編譯好的SQL語句,是基于SQL語句的結(jié)果集的可視化的表,而表不是

2、視圖沒有實際的物理記錄,而基本表有

3、表是內(nèi)容,視圖是窗口

4、表占用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時對它進(jìn)行修改,但視圖只能用創(chuàng)建的語句來修改

5、視圖是查看數(shù)據(jù)表的一種方法,可以查詢數(shù)據(jù)表中的某些字段構(gòu)成的數(shù)據(jù),只是一些SQL語句的集合。從安全的角度講,視圖可以防止用戶接觸數(shù)據(jù)表,因而用戶不知道表結(jié)構(gòu)

6、表屬于全局模式中的表,是實表;視圖屬于局部模式的表,是虛表

7、視圖的建立和刪除只影響視圖本身,不影響對應(yīng)的基本表

到此這篇關(guān)于淺析Mysql中的視圖的文章就介紹到這了,更多相關(guān)Mysql視圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何通過一張圖搞懂springBoot自動注入原理

    如何通過一張圖搞懂springBoot自動注入原理

    這篇文章主要給大家介紹了關(guān)于如何通過一張圖搞懂springBoot自動注入原理的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • 不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    這篇文章主要為大家介紹了不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • SpringBoot整合WebSocket的客戶端和服務(wù)端的實現(xiàn)代碼

    SpringBoot整合WebSocket的客戶端和服務(wù)端的實現(xiàn)代碼

    這篇文章主要介紹了SpringBoot整合WebSocket的客戶端和服務(wù)端的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • java多線程Synchronized實現(xiàn)可見性原理解析

    java多線程Synchronized實現(xiàn)可見性原理解析

    這篇文章主要介紹了java多線程Synchronized實現(xiàn)可見性原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java反射技術(shù)原理與用法實例分析

    Java反射技術(shù)原理與用法實例分析

    這篇文章主要介紹了Java反射技術(shù)原理與用法,結(jié)合實例形式分析了Java反射技術(shù)的基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 學(xué)習(xí)Java的9張思維導(dǎo)圖

    學(xué)習(xí)Java的9張思維導(dǎo)圖

    這篇文章主要為大家詳細(xì)介紹了學(xué)習(xí)Java的9張思維導(dǎo)圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java整數(shù)與byte數(shù)組的轉(zhuǎn)換實現(xiàn)代碼

    java整數(shù)與byte數(shù)組的轉(zhuǎn)換實現(xiàn)代碼

    這篇文章主要介紹了java整數(shù)與byte數(shù)組的轉(zhuǎn)換實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    這篇文章主要介紹了編寫調(diào)用新浪微博API的Java程序來發(fā)送微博的方法,只是展示了一個基本的程序框架而非一個完整的圖形化軟件:)需要的朋友可以參考下
    2015-11-11
  • java String.join()的使用小結(jié)

    java String.join()的使用小結(jié)

    String.join()是Java 8引入的一個實用方法,用于將多個字符串按照指定分隔符連接成一個字符串,本文主要介紹了java String.join()的使用小結(jié),感興趣的可以了解一下
    2025-03-03
  • springboot中websocket簡單實現(xiàn)

    springboot中websocket簡單實現(xiàn)

    本文主要介紹了springboot中websocket簡單實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論