好程序員Java教程:SQL語言之視圖

好程序員Java教程:SQL語言之視圖,前言:程序員

本章咱們將學習MySQL中的視圖,視圖是數據庫中的重要組件,本文將從視圖是什麼,視圖的做用,建立和使用視圖以及修改視圖這些方面講解視圖。數據庫

 

視圖是什麼

視圖View是一種虛擬的表,自己不保存數據,內部封裝了一條SELECT語句,數據來源於查詢的一張或多張實際數據的表。安全

視圖的結構和真實的表相同,也是有行和列組成,在視圖上也能夠進行增刪改查的操做。函數

 

視圖的做用

視圖主要用於查詢,使用視圖的優勢是:學習

1) 簡單spa

視圖能夠將複雜的查詢語句進行封裝,用戶使用時不須要關心表的結構、鏈接關係、篩選條件、分組和排序等等,只須要對視圖進行簡單的查詢。blog

2) 安全排序

建立視圖時,能夠篩選掉一些不但願用戶看到的行和列,也能夠給視圖設置訪問權限,讓不一樣級別的用戶看到不一樣的視圖,從而提升數據庫的數據安全性。教程

 

 

視圖的語法

建立視圖io

create view視圖名

as

select語句;

刪除視圖

drop view視圖名;

修改視圖

replace view 視圖名

as

select語句;

使用視圖

selec * from 視圖名 [where 條件];

代碼案例:

  1. -- 在單表上建立視圖 查詢女同窗的視圖
  2. create view view_female_stu
  3. as
  4. select * from tb_student where stu_gender = '女';
  5. -- 使用視圖
  6. select * from view_female_stu

  1. -- 使用鏈接查詢建立視圖,查詢學生姓名、課程和分數
  2. create view view_stu_score
  3. as
  4. select s.stu_id 學號, s.stu_name 姓名,c.course_name 課程,sc.score 分數
  5. from tb_student s left join tb_score sc on s.stu_id = sc.stu_id
  6. left join tb_course c on c.course_id = sc.course_id;
  7. -- 使用視圖
  8. select * from view_stu_score where 分數 > 80;

注意:在建立視圖時,查詢語句中的別名會做爲視圖的列名

視圖的修改

視圖主要用於查詢,可是也能夠執行insert、update和delete語句,結果會映射到視圖關聯的實際表中。

  1. -- 更新學生的年齡
  2. update view_female_stu set stu_age = stu_age + 3 where stu_id = 4;

執行上面代碼的結果是,實際的tb_student表被更新了。

  1. -- 更新學生分數
  2. update view_stu_score set 分數 = 83 where 學號 = 1;

執行上面代碼的結果是,更新失敗,出現錯誤:

爲何有的視圖能夠更新,而有的會失敗呢?

下面狀況的視圖不能夠執行insert、update和delete操做:

1)多表鏈接

2)包含distinct

3)包含聚合函數

4)包含group by

5)包含order by

6)包含union、union all

7)包含子查詢等

因此對視圖執行DML操做的限制條件仍是不少的,大多數狀況下咱們仍是對視圖進行查詢,若是須要DML操做仍是建議對實際表進行操做。

總結

視圖是一種虛擬的表,數據來源於從實際表中查詢的結果,它能夠簡化查詢操做,以及提升數據庫的安全性,本章學習了視圖的建立和使用語法,視圖能夠修改可是有比較多的限制條件,通常仍是用於查詢。

相關文章
相關標籤/搜索