MySQL 視圖

来源:https://www.cnblogs.com/chy18883701161/archive/2020/03/10/12456252.html
-Advertisement-
Play Games

視圖的概念 視圖是一張虛表,將查詢結果集保存起來,作為視圖使用。實際存在的表叫作基本表。 視圖的作用 安全性。grant授權用戶只操作視圖、只讀,可以保護基本表中的數據。 提高查詢性能。視圖只是基本表的一部分,查視圖比查全表快。尤其是多表查詢的時候,查視圖一張表比連接多張表查詢要快。 視圖的常用操作 ...


 

視圖的概念

視圖是一張虛表,將查詢結果集保存起來,作為視圖使用。實際存在的表叫作基本表。

 

 

視圖的作用

  • 安全性。grant授權用戶只操作視圖、只讀,可以保護基本表中的數據。
  • 提高查詢性能。視圖只是基本表的一部分,查視圖比查全表快。尤其是多表查詢的時候,查視圖一張表比連接多張表查詢要快。

 

 

視圖的常用操作


#創建視圖
create view view_computer_dep as (select * from tb_student where dep_id=1); #把電腦系的學生信息保存為視圖
#以後要查詢電腦系的學生信息直接從視圖中查,肯定比從tb_student全表裡查要快。把多表查詢的結果集保存為視圖一張虛表,查詢性能提升更加明顯。


#從視圖中查數據
select * from view_computer_dep;

#修改視圖
create or replace view view_computer_dep as (select id,name from tb_student where dep_id=1); #視圖名要相同。會使用新的結果集替換原來的結果集。
#必須要有create or,不能直接replace,語法不允許。
#如果視圖不存在,會自動創建


#刪除視圖
drop view view_computer_dep;

 

 


 

 

 

創建視圖的完整語法

create [algorithm=merge|temptable|undefined] view view_computer_dep as (select * from tb_student where dep_id=1) [with check option] ;

主要註意一下2個可選參數。

 

algorithm指定視圖的執行機制,有3個可選的值:

(1)merge  合併

合併有2層含義,一是sql語句合併,比如說select * from view_computer_dep 操作視圖,執行時會用視圖定義替換視圖名,實際執行的是select * from  (select * from tb_student where dep_id=1);二是操作合併,對視圖中的記錄可以進行增改刪查(實際是對基本表進行增改刪查),所以對視圖中記錄的增改刪會同步到基本表

此種方式不會創建臨時表,每次都是操作基本表,並不會提高查詢性能

 

(2)temptable  臨時表

(select * from tb_student where dep_id=1)  as  view_computer_dep; 
select * from view_computer_dep;
把對基本表的查詢結果保存為臨時表,每次操作的都是臨時表。

此種方式可以提高查詢性能,但只能對視圖進行查詢操作,不能進行增改刪。

 

(3)undefined 未定義

預設此參數時預設就是undefined,由資料庫決定是使用merge還是使用temptable,mysql是使用merge。

 

 

如果使用merge,還可以設置一個可選參數:with check option  是否檢查條件。

創建視圖時設置了條件where dep_id=1(過濾基本表),即視圖中的記錄都是dep_id=1的。

如果設置了with check option,那往視圖中插入記錄時記錄的dep_id必須是1,必須要滿足設置的條件,update更新視圖中的記錄時,dep_id=1這一個欄位也不能改。要保證視圖中的記錄都滿足條件

 

 


 

 

 

不可更新的視圖

就算使用merge,也不是所有視圖中的記錄都可以增刪改的。

create view view_computer_dep as (select * from tb_student where dep_id=1)

 

as指定視圖的數據來源,如果裡面使用了以下任何一種,創建的視圖都是不可更新的:

  • 聚合函數
  • group by子句
  • having子句
  • distinct關鍵字
  • union運算符
  • from來源於多個表或者來源於不可更新的視圖

一句話,不是直接來源於一個基本表的,對視圖中的記錄都只能進行查詢操作,不能進行增改刪。

 

比如使用了sum():create view view_computer_dep as (select sum(salary) from tb_employees );

你要update更新視圖中的sum這個欄位,怎麼同步到基本表?同步不了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Mysql常見筆試題 1、Mysql 中有哪幾種鎖? (1)表級鎖:開銷小,加鎖快。不會出現死鎖,鎖定粒度大,發生鎖衝突的概率高,併發度低。 (2)行級鎖:開銷大,加鎖慢。會出現死鎖,鎖定粒度小,發生鎖衝突的概率低,併發度高。 (3)頁面鎖:開銷時間、加鎖時間、鎖定粒度在 表級鎖 與 行級鎖 之 ...
  • 索引的概念 不使用索引,要操作某些行時,需要遍歷遍歷整張表來找到匹配的行,很花時間,且有點耗資源。 書:目錄=>快速定位到指定章節,不用一頁一頁地找 資料庫:索引=>快速定位到指定記錄,不用遍曆數據表去找,索引相當於數據表的目錄 索引的優缺點 提高查詢效率,尤其是記錄數超級多的時候,查詢速度提升極大 ...
  • Web項目中,當Java或者Go等語言速度提升到瓶頸的時候,我們需要關心MySQL的優化 可以優化的方面有很多:設計表、負載均衡、讀寫分離、SQL語句優化等 (1)IP地址設計 例如我們需要存儲IP地址:192.168.1.1 第一反應是選用VARCHAR(15);但是更好的方式是INT UNSIG ...
  • 原因:mysql server使用的是8.0的版本,密碼加密方式發生了變化,使用的Navicat版本較低,不能適配8.0的mysql的加密方式。 3種解決方式: 1、下載安裝最新版的Navicat 2、打開mysql自帶的命令行客戶端,輸入密碼 ALTER USER 'root'@'localhos ...
  • 下麵講解常見 Navicat Premium中創建用戶與資料庫的命令。 #用root登錄資料庫 #創建庫 create database XXX;#創建用戶 create user 'XXX' identified by 'XXX';#給用戶賦許可權 grant all on XXX.* to 'XX ...
  • mysql5.X和mysql8.X的驅動類、jdbc連接地址、引用Jar包等都是不一樣的。 下麵對照表以mysql5.7/8.0.11為例: 類型 驅動程式(JAR) maven配置 驅動類(jdbc.driver) jbdc連接地址(jdbc.url) 備註 mysql5.7 mysql-conn ...
  • 配置僅限於跨不同網情況,網路互通情況方案和配置會更簡單一點 內網A:MySql數據轉換成Csv { "job": { "setting": { "speed": { "channel":1 } }, "content": [ { "reader": { "name": "mysqlreader", ...
  • 場景 打開Navicat-文件-新建連接-Oracle 註: 博客: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 輸入對應的連接名、主機名,埠預設1521,服務名預設ORCL,輸入用戶 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...