亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL高級開發(fā)中視圖的詳細教程

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

1.介紹

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

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

2.語法

1). 創(chuàng)建

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

2). 查詢

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

3). 修改

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

4). 刪除

 DROP VIEW [IF EXISTS] 視圖名稱 [,視圖名稱] ...

演示示例:

-- 創(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;

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

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,我們會發(fā)現(xiàn),id為6和17的數(shù)據(jù)都是可以成功插入的。 但是我們執(zhí)行查詢,查詢出 來的數(shù)據(jù),卻沒有id為17的記錄。

因為我們在創(chuàng)建視圖的時候,指定的條件為 id<=10, id為17的數(shù)據(jù),是不符合條件的,所以沒有查 詢出來,但是這條數(shù)據(jù)確實是已經成功的插入到了基表中。

如果我們定義視圖時,如果指定了條件,然后我們在插入、修改、刪除數(shù)據(jù)時,是否可以做到必須滿足 條件才能操作,否則不能夠操作呢? 答案是可以的,這就需要借助于視圖的檢查選項了。

3.檢查選項

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

CASCADED 和 LOCAL ,默認值為 CASCADED 。

1). CASCADED

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

2). LOCAL

本地。

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

4.視圖的更新

要使視圖可更新,視圖中的行與基礎表中的行之間必須存在一對一的關系。如果視圖包含以下任何一 項,則該視圖不可更新:

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;

上述的視圖中,就只有一個單行單列的數(shù)據(jù),如果我們對這個視圖進行更新或插入的,將會報錯。

insert into stu_v_count values(10);

5.視圖作用

1). 簡單

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

2). 安全

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

3). 數(shù)據(jù)獨立 視圖可幫助用戶屏蔽真實表結構變化帶來的影響。

6.案例

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

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

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

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;

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

相關文章

  • mysql數(shù)據(jù)庫實現(xiàn)設置字段長度

    mysql數(shù)據(jù)庫實現(xiàn)設置字段長度

    這篇文章主要介紹了mysql數(shù)據(jù)庫實現(xiàn)設置字段長度,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 徹底刪除MySQL步驟介紹

    徹底刪除MySQL步驟介紹

    大家好,本篇文章主要講的是徹底刪除MySQL步驟介紹,感興趣的趕緊來看看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Linux虛擬機下mysql 5.7安裝配置方法圖文教程

    Linux虛擬機下mysql 5.7安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了Linux虛擬機下mysql 5.7安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL?Binlog日志的記錄模式寫入機制文件操作詳解

    MySQL?Binlog日志的記錄模式寫入機制文件操作詳解

    這篇文章主要介紹了MySQL?Binlog日志的記錄模式寫入機制文件操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • mysql索引學習教程

    mysql索引學習教程

    在mysql 中,索引可以分為兩種類型 hash索引和 btree索引。這篇文章主要介紹了mysql索引的相關知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • mysql建立高效的索引實例分析

    mysql建立高效的索引實例分析

    這篇文章主要介紹了mysql建立高效的索引,結合實例形式分析了mysql建立高效索引的相關實現(xiàn)技巧與相關操作注意事項,需要的朋友可以參考下
    2019-07-07
  • MySql中特殊運算符的使用方法總結

    MySql中特殊運算符的使用方法總結

    這篇文章主要給大家介紹了關于MySql中特殊運算符的使用方法,分別介紹的是<=> 安全比較運算符、:= 賦值的作用、@ 用戶變量以及@@ 系統(tǒng)變量,文中介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • mysql 數(shù)據(jù)庫取前后幾秒 幾分鐘 幾小時 幾天的語句

    mysql 數(shù)據(jù)庫取前后幾秒 幾分鐘 幾小時 幾天的語句

    這篇文章主要介紹了mysql 數(shù)據(jù)庫中取前后幾秒 幾分鐘 幾小時 幾天的語句,需要的朋友可以參考下
    2018-01-01
  • mysql 5.7.21 解壓版安裝配置圖文教程

    mysql 5.7.21 解壓版安裝配置圖文教程

    這篇文章主要為大家詳細介紹了mysql 5.7.21 解壓版安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下
    2014-08-08

最新評論