【MySQL筆記】視圖

目錄

    • 一、什么是視圖?
    • 二、使用視圖的優勢
    • 三、視圖的創建與使用
    • 四、不能更新視圖的場景
    • 五、刪除視圖
    • 六、總結

一、什么是視圖?

視圖(View)是一種虛擬表,不存儲實際數據,而是通過執行預定義的查詢動態生成數據。用戶可以像操作普通表一樣對視圖進行查詢、更新和管理,但其數據完全依賴于基礎表。視圖的核心價值在于:

  • 封裝復雜查詢,簡化數據訪問。
  • 隱藏敏感字段(如密碼、余額)。
  • 對外提供一致的列名和結構,避免業務代碼頻繁修改。
-- 示例:創建學生成績視圖
create view v_student_score as
selects.id, s.name, s.sno, cls.name as class_name, c.name as course_name, sco.score
from
student s, 
class cls, 
score sco, 
course c
where s.class_id = cls.id, 
and sco.student_id = s.id, 
and sco.course_id = c.id;

二、使用視圖的優勢

  1. 隱藏敏感字段
    例如賬戶表 account(id, name, balance, password) 中,通過視圖僅暴露非敏感字段,將敏感字段balance,password隱藏:
create view v_account as 
select id, name from account;
  1. 統一訪問規范
    當表結構變更時,假如 DBA 修改了 student 表,將列 sno 重命名為 number,如果不使用視圖,那么就需要大量改動業務代碼,將列 sno 重命名為 number,但是如果使用視圖,則只需調整視圖定義,業務代碼不需要改動,只需要將查詢語句的 sno 改為 number 即可,對外訪問的“接口”依舊是 sno:
-- 舊視圖
create view v_student (id, name, sno) as
select id, name, sno from student;-- 新視圖(適應列名變更)
create view v_student (id, name, sno) as
select id, name, number from student;

三、視圖的創建與使用

  1. 創建語法
create view view_name [(列別名1, 列別名2, ...)] as
select 語句; // 任意的查詢語句都可以
  1. 視圖與表連接查詢
    視圖可像普通表一樣參與連接操作:
select * from v_student2 s 
join class c on s.class_id = c.id;
  1. 通過視圖更新數據
    注意:更新視圖會影響基礎表,但需滿足特定條件:
-- 更新視圖(會影響基礎表score)
update v_student_score1 set score = 95 where id = 1;

四、不能更新視圖的場景

以下類型的視圖不支持更新操作:

  • 使用聚合函數(如 SUM(), COUNT())。
  • 使用 distinct 或 group by / having。
  • 使用 union 或 union all。
  • 包含子查詢的 select 列表。
  • from 子句中引用不可更新視圖。
  • 包含 order by 子句,可能導致更新失敗。

五、刪除視圖

-- 可以刪除單個視圖
drop view v_student;-- 可以批量刪除視圖
drop view v_student2, v_student_score;

六、總結

特性說明
存儲不存儲數據,依賴基礎表動態生成
核心用途簡化復雜查詢、隱藏敏感字段、統一數據接口
更新限制避免聚合、分組、排序等場景
性能影響查詢性能與底層SQL復雜度相關,無額外存儲開銷
維護建議視圖嵌套不超過兩層,避免過度封裝

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

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

相關文章

【RK3576】【Android14】分區劃分

獲取更多相關的【RK3576】【Android14】驅動開發,可收藏系列博文,持續更新中: 【RK3576】Android 14 驅動開發實戰指南

Datawhale 25年7月組隊學習coze-ai-assistant Task1學習筆記:動手實踐第一個AI Agent—英倫生活口語陪練精靈

Chap1 了解AI工作流 1.1什么是工作流 工作流 就像是一條流水線,把復雜的任務拆分成多個簡單的步驟,每一步都有明確的目標和流程。1.2智能體和工作流的區別 智能體(AI Agent) **是什么 :**智能體是一個自動化的“助手”…

Webpack插件開發深度指南:從原理到實戰

Webpack插件是前端工程化的核心引擎,本文將帶你深入插件開發全流程,實現一個功能完整的資源清單插件,并揭示Tapable事件系統的核心原理。 一、Webpack插件機制解析 1.1 插件架構核心:Tapable事件系統 Webpack基于Tapable構建了…

2、Redis持久化詳解

Redis持久化詳解 文章目錄 Redis持久化詳解 前言 RDB和AOF的區別 RDB和AOF的優缺點 Redis 持久化配置 1、RDB持久化配置 2、AOF持久化配置(嘗試修復會刪除aof文件內容) 3、AOF 重寫功能 新增知識點: 新增知識點: 前言 Redis是一種高級 key-value 型的NoSQL數據庫。它跟mem…

curl 命令詳解

curl 命令的 -d/–data 和 --data-urlencode 的區別 curl 命令的 -d/–data 和 --data-urlencode 都用于發送 HTTP POST 請求的數據,但關鍵區別在于 是否自動對數據進行 URL 編碼。以下是詳細對比: curl 命令的 -d/--data 和 --data-urlencode 都用于發送…

ubuntu下好用的錄屏工具

以下是 vokoscreen 的安裝教程,適用于 Linux 系統。vokoscreen 是一款簡單易用的屏幕錄制工具,支持錄制屏幕、攝像頭和音頻。 安裝 vokoscreen vokoscreen 提供了多種安裝方式,包括通過包管理器、Deb 包或 AppImage 文件。 方法 1&#xf…

筆試大題20分值(用兩個棧實現隊列)

目錄前言一、原題二、解題思路三、代碼實現(c/c)C語言代碼C代碼實現結語前言 目前博主在處于秋招求職的關鍵時期,在暑假這段時間會頻繁更新博客,想在暑假期間把一些常考的面試和筆試題過一下,利用這兩個月沉淀一下技術…

【知識掃盲】tokenizer.json中的vocab和merges是什么?

在自然語言處理里,tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 庫生成的,它是分詞器配置的核心文件。這里面的 vocab 和 merges 是子詞分詞算法(像 BPE 這種)的重要構成要素。下面為你詳細解釋它們的作用和工作原理&…

【安卓筆記】RxJava的Hook機制,整體攔截器

0. 環境: 電腦:Windows10 Android Studio: 2024.3.2 編程語言: Java Gradle version:8.11.1 Compile Sdk Version:35 Java 版本:Java11 1. 使用場景 整個項目都是用了RxJava,需要對 整個/部分 項目…

NX二次開發常用函數——從一個坐標系到另一個坐標系的轉換(UF_MTX4_csys_to_csys )相同體坐標轉化

再做項目時相信大家都會用到坐標轉化,例如,我之前寫的案例分享中的博客都用到過,之前總是找借口進行if else判斷,雖然可以實現,但是比起坐標變換無論代碼復雜程度還是運行速度都比較差,之前參加過曹大師的教學訓練營,但是明顯感覺到大佬寫代碼的邏輯性以及模塊化能力都比…

數據庫防止數組字符串序列化

請求接到數組["aa","bb"]后,后端需要轉換成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他轉換,在字段存入數據庫后會["\"a…

若依框架文件上傳返回路徑端口錯誤 - Nginx代理環境下serverConfig.getUrl()獲取端口異常

目錄一 、問題描述二、問題現象三、問題根本原因3.1 代碼分析3.2 問題核心四、解決方案五、總結一 、問題描述 在使用若依框架進行項目開發時,遇到了一個令人困擾的問題:文件上傳功能在本地開發環境運行正常,但部署到服務器后,上…

使用PyInstaller打包 Python 工程

引言:大模型是個好工具,盡管好多內容都是拼湊的,但是整理學到的就是自己的。因工作需要隱藏python源代碼,方法有PyInstaller 、Cpython等多種方法,PyInstaller更為常用,PyInstaller打包 Python 工程步驟整理如下: 一、確保系統環境準備就緒 安裝 Python 和 pip 確認版本…

Python 程序設計講義(1):PyCharm 安裝教程

Python 程序設計講義(1):PyCharm 安裝教程 一、安裝 Python 解釋器 1、下載 Python 安裝文件 點擊如下鏈接進入 Python 官網: https://www.python.org/ 在彈出的頁面中單擊【Downloads】,然后單擊下面的【Download Pyt…

uniapp云打包安卓

1、基礎云打包 2、修改logo3、怎么實現下拉菜單4、修改啟動頁啟動頁默認這樣 5、URL Scheme頁面跳轉

Python----NLP自然語言處理(英文分詞器--NLTK)

一、NLTK_介紹NLTK(Natural Language Toolkit,自然語言處理工具包),一個主要用于清洗和處理英文文本的Python工具包。它有很多的功能,我們主要使用的是它的分詞功能,之前講過中文分詞是比較復雜的&#xff…

傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗

歡迎來到我的博客,代碼的世界里,每一行都是一個故事🎏:你只管努力,剩下的交給時間 🏠 :小破站 傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗它是什么核心功能搜索編程左右互動感謝…

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 1. 引言 在當今的互聯網通信時代,實時語音通信已成為人們日常生活中不可或缺的一部分。然而,語音通信質量常…

Attu-Milvus向量數據庫可視化工具

本文介紹了如何安裝可視化工具Attu,包括使用Docker鏡像啟動并訪問Attu服務。 目錄 前言 一、Attu安裝 1. Docker容器安裝 2. 桌面程序安裝 二、使用 Milvus Web U 前言 Attu是一款專為Milvus向量數據庫打造的開源數據庫管理工具,提供了便捷的圖形化…

高效檢測數據突變的MDAM算法詳解

在數據分析領域,我們經常需要檢測數據序列中的異常變化。今天給大家介紹一種簡單但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能幫你輕松發現數據中的均值突變現象!1. 🔍 算法原理累計數均值突變檢測算法(MDAM…