日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL语法整理(五)-视图

發布時間:2023/12/10 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL语法整理(五)-视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視圖

含義:從數據庫一個或多個表中導出的虛擬表
作用:
方便用戶操作: 要求所見即所需,無需添加額外的查詢條件,直接查看

增加數據的安全性:通過視圖,用戶只能查看或修改指定的數據

提高表的獨立邏輯性:原有數據表結構的變化,不會影響視圖,如果修改原有列,則只需修改視圖即可。

  • 創建視圖

語法:

MYSQL
create
[algorithm = {undefined | merge | temptable}]
view 視圖名[{屬性清單}]
as select 語句
[with [cascaded|local] check option];
algorithm:選擇的算法
with check option:表示更新視圖時要保證在該視圖的權限范圍之內

undfined:表示MySQL 自動選擇所需使用的算法
merge:表示將視圖的語句與視圖的定義合并,使得視圖定義的某一部分取代語句的對應部分
temptable:將視圖的結果存入臨時表

cascaded:表示更新視圖時要滿足所有相關視圖和表的條件
local:表示更新視圖時,要滿足該視圖本身的定義的條件即可

Mssql
create
view 視圖名 as select 語句;

是否有權限創建?(mysql)
通過SQL 查詢:
select select_priv,create_view_priv from mysql.user where user = ‘root’;

創建視圖

在單表上創建視圖:

eg: create view department_view1 as select * from department; create view department_view2(name) as select d_name from department;

在多表上創建視圖

create algorithm = merge view employee_view1(name,department,sex,age,address) as select name,dept.d_name,sex,age,address from employee emp inner join department dept on emp.e_no = dept.e_no with local check option;

查看視圖(mysql)

desc 查看

eg: desc department_view1;

查看視圖 (mssql)

sp_helptext查看

eg: exec sp_helptext department_view1;

在sysobjects表中查看(狀態)

eg: select * from sysobjects where name = 'enployee_view1'

查看視圖(Oracle)
在user_views 表中查看(定義)

eg: select view_name,text from user_views where view_name = upper('vm_employee');

修改視圖

通過create or replace view 修改(mysql)
沒有則創建,有則修改

eg: create or replace algorithm = temptable view department_view1(department) as select d_name from department;

通過alter 修改
只能修改不能創建

eg: alter view department_view2(department) as select d_name from department dept with check option;
  • 更新視圖
eg: update department_view3 set name ='研發部'

注:更新視圖實際上是更新表;并非所有的視圖都能更新;

視圖不能更新情況:
視圖中包含聚合函數

eg: create view employee_view4(name) as select name,sex,count(name) from employee;

視圖中包含union、union all、distinct、group by和having等關鍵字

eg: create view employee_view5(name,sex,address) as select name,sex,address from employee group by e_np;

常量視圖

eg:create view employee_view6 as select 'Boyce' as name;

視圖中的select 中包含子查詢

eg: create view employee_view7(name) as select (select name from employee);

由不可更新的視圖導出的視圖(mysql)

eg: create view employee_view8 as select * from employee_view7;

創建視圖時,algorithm 為temptable 類型(mysql)

eg: create algorithm = temptable view employee_view9 as select * from employee;

視圖對應的表上存在沒有默認值的列,而且該列沒有包含在視圖里。[最好視圖僅限于查詢,若要更新則要考慮全面,否則會造成更新失敗]

  • 刪除視圖

語法:
drop view [if exists] 視圖列表

eg: drop view if exists employee_view1; drop view if exists department_view1,department_view2;

判斷用戶是否有權限:

eg: select drop_priv from mysql.user where user = 'root';

---------------------如有錯誤歡迎指證-------------------------------

總結

以上是生活随笔為你收集整理的SQL语法整理(五)-视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。