42.MySQL視圖

1.一個需求

emp 表的列信息很多,有些信息是個人重要信息 (比如 sal, comm, mgr, hiredate),如果我們希望某個用戶只能查詢 emp 表的 (empno、ename, job 和 deptno ) 信息,有什么辦法?

表的數據:

想讓用戶查詢到的:

MySQL提供的視圖(view)功能就可以滿足我們的需求。

2.視圖的基本概念

  1. 視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含列,其數據來自對應的真實表(基表)
  2. 視圖和基表關系的示意圖

  1. 對視圖的總結

①視圖是根據基表來創建的,視圖是虛擬的表;

②視圖也有列,數據來自基表;

③通過視圖可以修改基表的數據;

④基表的改變,也會影響到視圖的數據。

3.視圖的基本使用

3.1創建一個新視圖

create view 視圖名 as select語句  

3.2修改已存在的視圖

alter view 視圖名 as select語句 

3.3查看某個視圖的創建語句

SHOW CREATE VIEW 視圖名

3.4刪除一個或多個視圖

drop view 視圖名1,視圖名2

4.視圖的使用細節

視圖(view)
● 視圖細節討論

  1. 創建視圖后,到數據庫去看,對應視圖只有一個視圖結構文件(形式: 視圖名.frm) ;
CREATE VIEW emp_view AS SELECT empno,ename,job,deptno FROM emp;

可以看到視圖只有emp_view.frm這個結構文件,而不像別的數據庫表有其真正的數據文件。

  1. 視圖的數據變化會影響到基表,基表的數據變化也會影響到視圖[insert update delete ] ;

查詢一下基表和視圖最原始的樣子:

在視圖中修改數據,基表也會隨之改變:

UPDATE emp_view SET job = 'worker' WHERE empno = 7499;

在基表中插入數據,視圖也會更新。

INSERT INTO emp VALUES(8848,'sakura','worker',8888,'2013-6-1',800,200,30);

  1. 視圖中可以再使用視圖,數據仍然來自基表。
CREATE VIEW emp_view_view AS SELECT ename,job,deptno FROM emp;
SELECT * FROM emp_view_view;

5.視圖的使用實例

● 視圖練習:針對 emp , dept ,和 salgrade 張三表.創建一個視圖,可以顯示雇員編號,雇員名,雇員部門名稱和薪水級別。

數據庫建表準備,并且插入一些示例數據:

CREATE TABLE emp (empno INT PRIMARY KEY,        ename VARCHAR(50) NOT NULL,  job VARCHAR(50),             mgr INT,                       hiredate DATE,                sal DECIMAL(10,2) NOT NULL,   comm DECIMAL(10,2),           deptno INT
);INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES 
(7369, 'SMITH',  'CLERK',     7902, '1980-12-17', 800.00,  NULL,   20),
(7499, 'ALLEN',  'SALESMAN',  7698, '1981-02-20', 1600.00, 300.00, 30),
(7521, 'WARD',   'SALESMAN',  7698, '1981-02-22', 1250.00, 500.00, 30),
(7566, 'JONES',  'MANAGER',   7839, '1981-04-02', 2975.00, NULL,   20),
(7654, 'MARTIN', 'SALESMAN',  7698, '1981-09-28', 1250.00, 1400.00,30),
(7698, 'BLAKE',  'MANAGER',   7839, '1981-05-01', 2850.00, NULL,   30),
(7782, 'CLARK',  'MANAGER',   7839, '1981-06-09', 2450.00, NULL,   10),
(7788, 'SCOTT',  'ANALYST',   7566, '1987-04-19', 3000.00, NULL,   20),
(7839, 'KING',   'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL,   10),
(7844, 'TURNER', 'SALESMAN',  7698, '1981-09-08', 1500.00, 0.00,   30);
CREATE TABLE dept (deptno INT PRIMARY KEY,       dname VARCHAR(50) NOT NULL,   loc VARCHAR(50)      
);INSERT INTO dept (deptno, dname, loc)
VALUES 
(10, 'ACCOUNTING', 'NEW YORK'),  -- 財務部,對應 emp 中 deptno=10 的雇員(如 KING、CLARK)
(20, 'RESEARCH',   'DALLAS'),    -- 研發部,對應 emp 中 deptno=20 的雇員(如 SMITH、JONES、SCOTT)
(30, 'SALES',      'CHICAGO');   -- 銷售部,對應 emp 中 deptno=30 的雇員(如 ALLEN、WARD、MARTIN 等)
CREATE TABLE salgrade (grade INT PRIMARY KEY,        -- 薪資等級(1-5級,等級越高薪資范圍越大)losal DECIMAL(10,2) NOT NULL, -- 該等級的最低工資hisal DECIMAL(10,2) NOT NULL  -- 該等級的最高工資
);-- 插入示例數據(覆蓋emp表中所有sal值的范圍)
INSERT INTO salgrade (grade, losal, hisal)
VALUES 
(1, 500.00, 1000.00),    -- 對應emp中sal=800.00(SMITH)
(2, 1001.00, 1500.00),   -- 對應emp中sal=1250.00(WARD、MARTIN)、1500.00(TURNER)
(3, 1501.00, 2000.00),   -- 對應emp中sal=1600.00(ALLEN)
(4, 2001.00, 3000.00),   -- 對應emp中sal=2450.00(CLARK)、2850.00(BLAKE)、2975.00(JONES)、3000.00(SCOTT)
(5, 3001.00, 6000.00);   -- 對應emp中sal=5000.00(KING)

創建視圖,根據需求寫select語句:

CREATE VIEW emp_dept_salgrade_view AS SELECT emp.empno AS '雇員編號',      -- 從 emp 表取雇員編號emp.ename AS '雇員名',        -- 從 emp 表取雇員名dept.dname AS '部門名稱',     -- 從 dept 表取部門名稱salgrade.grade AS '薪水級別'  -- 從 salgrade 表取薪資等級
FROM emp,dept,salgrade
WHERE emp.deptno = dept.deptno AND emp.sal BETWEEN salgrade.losal AND salgrade.hisal;

查看一下該視圖:

SELECT * FROM emp_dept_salgrade_view;

6.視圖的使用總結

  1. 安全。一些數據表有著重要的信息。有些字段是保密的,不能讓用戶直接看到。這時就可以創建一個視圖,在這張視圖中只保留一部分字段。這樣,用戶就可以查詢自己需要的字段,不能查看保密的字段。
  2. 性能。關系數據庫的數據常常會分表存儲,使用外鍵建立這些表的之間關系。這時,數據庫查詢通常會用到連接(JOIN)。這樣做不但麻煩,效率相對也比較低。如果建立一個視圖,將相關的表和字段組合在一起,就可以避免使用JOIN查詢數據。
  3. 靈活。如果系統中有一張舊的表,這張表由于設計的問題,即將被廢棄。然而,很多應用都是基于這張表,不易修改。這時就可以建立一張視圖,視圖中的數據直接映射到新建的表。這樣,就可以少做很多改動,也達到了升級數據表的目的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94421.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MinIO01-入門

零、文章目錄 MinIO01-入門 1、介紹 (1)介紹 MinIO 是一款基于 Apache License v2.0 的開源對象存儲系統,專為海量非結構化數據(如圖片、視頻、日志文件等)設計,兼容 Amazon S3 API,支持高性…

*Docker數據卷(Volume)核心機制剖析:持久化與共享的終極解決方案

根本問題當容器被刪除時,其內部產生的所有文件(包括配置文件、數據庫、日志)都會不可逆丟失。數據卷(Volume)通過外置存儲方案徹底解決此痛點。一、數據卷與普通容器存儲對比實驗 場景1:無卷模式下的寫入悲…

原型模式在C++中的實現與面向對象設計原則

引言 在軟件開發中,原型模式是一種常用的設計模式,主要用于創建對象的克隆。通過原型模式,我們可以避免復雜的對象創建過程,尤其是當對象的初始化需要大量資源或復雜操作時。本文將通過一個具體的例子,詳細介紹如何在C…

SpringCloud學習------Gateway詳解

在微服務架構中,隨著服務數量的激增,如何統一管理服務入口、實現請求路由、保障服務安全等問題日益突出。SpringCloud Gateway 作為 Spring 官方推出的網關組件,憑借其強大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

計算機網絡:子網掩碼在路由轉發中的關鍵作用

在路由表中,子網掩碼是一個不可或缺的組成部分,其核心作用是精確界定IP地址中“網絡位”和“主機位”的邊界,從而實現路由器對數據包的準確轉發。以下從多個角度詳細解釋其必要性: 1. 區分網絡位與主機位,定位目標網絡 IP地址由“網絡標識”(網絡位)和“主機標識”(主…

14.Home-新鮮好物和人氣推薦實現

新鮮好物實現1.準備模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主體內容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系統重置用戶密碼指南

Linux 系統重置用戶密碼指南 在 Linux 系統運維中&#xff0c;重置用戶密碼&#xff08;尤其是 root 密碼&#xff09;是一項核心技能。當您忘記密碼時&#xff0c;可以通過進入單用戶模式或恢復模式來修改密碼。此方法適用于大多數 Linux 發行版&#xff0c;如 RHEL/CentOS、D…

[自動化Adapt] GUI交互(窗口/元素) | 系統配置 | 非侵入式定制化

第三章&#xff1a;GUI交互&#xff08;窗口/元素&#xff09; 各位OpenAdapt探索者&#xff0c;歡迎回來~ 在第一章&#xff1a;錄制引擎中&#xff0c;我們揭示了OpenAdapt如何通過"眼睛和耳朵"捕捉所有操作細節。接著在第二章&#xff1a;數據模型中&#xff0c…

Java 模版進階

文章目錄模版通配符模版 通配符 實例 import java.util.ArrayList; import java.util.List;class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T message) {this.message message;} } public class test {public …

統計魚兒分布情況 Java

假設有一個池塘&#xff0c;管理員在池塘中添加隨機數量的魚類&#xff0c;為了統計魚類的分布情況&#xff0c;他將池塘劃分為8*8的二維網格&#xff0c;魚兒隨機游動&#xff0c;但是每個網格中最多容納100條魚&#xff0c;要求編寫程序顯示魚兒分布情況&#xff0c;并計算魚…

【HUST】計算機|大學計算機基礎內容(純科普向)+數據結構數組、樹、隊列【舊文搬運】

最初發布時間&#xff1a;2020-09-19 23:17:48 以前寫這篇文章&#xff0c;主要是接觸到一些非計算機學院的同學&#xff0c;為了交流方便我寫下了這篇文章……雖然現在回過頭來看寫得也比較草率&#xff0c;但確實是我對電腦的基礎操作的最早的認識&#xff0c;放到現在我絕對…

CRT調試堆檢測:從原理到實戰的資源泄漏排查指南

在C/C開發中&#xff0c;內存泄漏和資源管理不當是導致程序崩潰、性能下降的常見原因。微軟提供的C運行時庫&#xff08;CRT&#xff09;內置了強大的調試工具&#xff0c;能夠幫助開發者在開發階段及時發現并修復資源泄漏問題。本文將深入解析CRT調試堆的工作原理&#xff0c;…

filezilla出現connected refused的時候排查問題

問題描述: 系統是ubuntu20.04&#xff0c;使用filezilla&#xff0c;兩個主機之間能夠ping通&#xff0c;但是filezilla使用sftp連接的時候顯示的是 FATAL ERROR: Connection refused Could connect to the server應該如何排查問題呢 這是一個非常典型的SFTP連接問題。“Connec…

FPGA 基本設計思想--乒乓操作、串并轉換、流水線

乒乓操作&#xff08;Ping-Pong&#xff09;的理解&#xff1a;為什么是另一種pipeline&#xff1f;-CSDN博客 FPGA菜鳥學習筆記——2、四大設計思想 - 知乎 乒乓操作&#xff08;Ping-Pong&#xff09;-CSDN博客 乒乓操作原理與FPGA設計-CSDN博客 乒乓操作 — [野火]FPGA …

2023 年 6 月 GESP Python 二級試卷真題+答案+解析

2023 年 6 月 GESP Python 二級試卷解析 一、單選題&#xff08;每題 2 分 &#xff0c;共 30 分&#xff09; 1 、 高級語言編寫的程序需要經過以下&#xff08; &#xff09;操作&#xff0c;可以生成在計算機上運行的可執行代碼。 A. 編輯 B. 保存 C. 調試…

數據對齊:如何處理時間序列與空間對齊問題?

在多模態學習中&#xff0c;不同模態&#xff08;文本、語音、圖像、視頻、傳感器數據等&#xff09;具有不同的采樣率、時間步長、空間分辨率。例如&#xff0c;視頻是連續幀&#xff0c;音頻是高采樣頻率的波形&#xff0c;文本是離散符號序列。為了實現有效融合&#xff0c;…

兩個任務同一個調用時間 CRON:0 0 3 * * ?,具體如何調度的,及任務如何執行的

xxLjob兩個任務 pullGuanjiaSalesJob&#xff0c;不同的執行參數&#xff0c;配置了同一個 XxlJob("pullGuanjiaSalesJob")兩個任務同一個調用時間 CRON&#xff1a;0 0 3 * * ?&#xff0c;具體如何調度的&#xff0c;及任務如何執行的在 XXL-JOB 中&#xff0c;當…

【基于WAF的Web安全測試:繞過Cloudflare/Aliyun防護策略】

當Cloudflare或阿里云WAF矗立在Web應用前端&#xff0c;它們如同智能護盾&#xff0c;過濾惡意流量。然而&#xff0c;真正的Web安全測試不止于驗證防護存在&#xff0c;更需挑戰其邊界——理解并模擬攻擊者如何繞過這些先進防護&#xff0c;才能暴露深藏的風險。這不是鼓勵攻擊…

使用YOLOv8-gpu訓練自己的數據集并預測

本篇將教學使用示例代碼訓練自己的數據集&#xff08;train&#xff09;以及預測&#xff08;predict&#xff09;。 目錄 一、代碼獲取 二、訓練 1、添加自己的訓練集 2、創建訓練集設置文件 3、 修改訓練代碼中數據集設置文件 4、開始訓練 三、預測 1、 修改圖片路徑…

Transformer的并行計算與長序列處理瓶頸

Transformer相比RNN&#xff08;循環神經網絡&#xff09;的核心優勢之一是天然支持并行計算&#xff0c;這源于其自注意力機制和網絡結構的設計.并行計算能力和長序列處理瓶頸是其架構特性的兩個關鍵表現&#xff1a; 并行計算&#xff1a;指 Transformer 在訓練 / 推理時通過…