什么是MySQL 視圖

文章目錄

  • 什么是MySQL 視圖
    • 定義
    • 為什么使用視圖
    • 創建/替換視圖
    • 更新視圖
    • 總結

什么是MySQL 視圖

定義

視圖是一種虛擬表,是一個邏輯表,本身并不包含數據,通過select語句去基本表上動態生成數據。

舉個例子:

你有一個員工表employees

CREATE TABLE employees (id INT,name VARCHAR(100),department VARCHAR(50),salary DECIMAL(10,2)
);

你想經常查看技術部員工的信息,可以創建一個視圖:

CREATE VIEW tech_employees AS
SELECT id, name, salary
FROM employees
WHERE department = '技術部';

現在你可以像查詢一張表一樣使用這個視圖:

SELECT * FROM tech_employees;

為什么使用視圖

  1. 封裝復雜查詢:把多表 join 或帶過濾條件的查詢封裝成一個視圖,使用更方便。
  2. 提供數據訪問權限控制:可以只給用戶訪問視圖的權限,不直接暴露底層表。
  3. 提高代碼復用性:視圖定義一次,多次復用。
  4. 解耦數據庫設計:隱藏底層表結構的變化,對上層透明。

創建/替換視圖

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

其中,在create語句的時候加上or replace然后對想要修改的視圖進行再次創建就可以替換已有視圖。

更新視圖

對視圖的更新操作(INSERT、UPDATE、DELETE)最終都會反映到其對應的基表上。

**[WITH [CASCADED | LOCAL] CHECK OPTION]:**表示視圖在更新時保證在視圖的權限范圍之內

  • cascade是默認值,表示更新視圖的時候,要滿足視圖和表的相關條件。級聯作用,這個視圖所關聯的上層所有視圖和基表都會開始在更新的時候判斷條件。
  • local表示更新視圖的時候,要滿足該視圖定義的一個條件即可。沒有級聯功能,只有本視圖需要判斷條件。

注: 要使視圖更新,還需要保證視圖中的行和基表中的行之間存在著一對一的關系。如果視圖的select語句包含以下任意一項,視圖就不能被更新:

  1. 聚合函數或窗口函數(SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL

總結

MySQL視圖是數據庫中的虛擬表,它不存儲實際數據,而是基于SELECT語句動態生成結果。視圖的主要價值在于簡化復雜查詢、提供安全的數據訪問控制,以及提高代碼的復用性。

在實際應用中,視圖特別適合用于封裝常用的多表關聯查詢、隱藏敏感字段,或為不同用戶角色提供定制化的數據視角。需要注意的是,并非所有視圖都支持更新操作,包含聚合函數、DISTINCT、GROUP BY等復雜查詢的視圖通常是只讀的。

合理使用視圖可以讓數據庫設計更加靈活,提升開發效率,同時增強數據安全性。

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

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

相關文章

Neo4j 5.x版本的導出與導入數據庫

neo4j的版本管理真的是災難級別的,文檔也亂,特定版本也難下,不同版本之間的命令存在很大差異,網上的很多資料都是Neo4j 4.x的,在此給出我自己試出來的5.x的導入導出方法使用前先關閉neo4j服務進入到neo4j安裝目錄的bin…

Java——深入解析 CGlib 與 JDK 動態代理:原理、區別與實踐

在 Java 開發中,動態代理是實現 AOP(面向切面編程)的核心技術,廣泛應用于日志記錄、事務管理、權限控制等場景。其中,JDK 動態代理和 CGlib 是兩種最常用的動態代理實現方式。本文將從原理、區別、使用場景等方面深入解…

變頻器帶動電機:全方位解析參數變化

在現代工業自動化領域,變頻器作為電機調速的核心設備,扮演著至關重要的角色。它能夠精準地控制電機的運行狀態,通過改變電源頻率和電壓,實現電機轉速、轉矩、功率等參數的靈活調整。本文將深入探討變頻器帶動電機時,各…

OpenCV 入門知識:圖片展示、攝像頭捕獲、控制鼠標及其 Trackbar(滑動條)生成!

😶?🌫?😶?🌫?😶?🌫?😶?🌫?Take your time ! 😶?🌫?😶?🌫?😶?🌫?😶?🌫?…

Elasticsearch是什么?

Elasticsearch(簡稱ES)是一種基于Lucene的分布式搜索引擎,廣泛應用于大數據、日志分析、全文搜索等場景。它的核心是提供高效、可擴展的搜索和分析能力。ES 提供了強大的全文搜索、聚合分析、數據可視化等功能,可以用來快速地對海…

(Arxiv-2025)OmniGen2:通向先進多模態生成的探索

OmniGen2:通向先進多模態生成的探索 paper title:OmniGen2: Exploration to Advanced Multimodal Generation paper是BAAI發布在Arxiv 2025的工作 Code:鏈接 Abstract 在本研究中,我們提出了 OmniGen2,這是一種多功能、開源的生成…

期權到期會對大盤有什么影響?

本文主要介紹期權到期會對大盤有什么影響?期權到期對大盤的影響主要體現在以下幾個方面,但整體影響通常有限且短期,具體效果需結合市場環境、期權規模及行權價位置綜合判斷。期權到期會對大盤有什么影響?1. 市場流動性波動到期日效…

【LeetCode刷題指南】--隨機鏈表的復制

🔥個人主頁:草莓熊Lotso 🎬作者簡介:C研發方向學習者 📖個人專欄: 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言:生活是默默的堅持,毅力是永久的…

系統學習算法:專題十四 鏈表

前提知識:1.畫圖,數據結構相關的題,畫圖必不可少,只要能畫出來,那么后面的代碼就很容易能寫出來,因為將抽象的數據結構轉換為直觀的圖畫2.引入虛擬頭結點,也叫哨兵位,能夠避免考慮很…

零基礎學后端-PHP語言(第一期-PHP環境配置)

從本期開始,我們學習PHP,但是我們要先配置PHP環境 PHP官網鏈接:PHP For Windows: Binaries and sources Releases 我們可以看到有以下資源 可以看到有很多php的版本,有Non Thread Safe和Thread Safe,還有zip&#xf…

C++ primer知識點總結

《C Primer》系統學習指南:從C到C的平滑過渡根據你提供的《C Primer》目錄和你的需求(C語言背景轉C,側重網絡編程),我將為你制定一個全面的學習計劃,包含知識點詳解、C/C對比、實戰案例和分階段項目練習。第…

異構融合 4A:重構高性能計算與復雜場景分析的安全與效率邊界

當全球數據量以每兩年翻一番的速度爆炸式增長,高性能計算(HPC)與復雜場景分析正成為破解氣候預測、基因測序、金融風控等世界級難題的關鍵引擎。但異構計算環境的碎片化、多系統協同的復雜性、數據流動的安全風險,正在形成制約行業…

【華為機試】240. 搜索二維矩陣 II

文章目錄240. 搜索二維矩陣 II描述示例 1示例 2提示解題思路核心分析問題轉化算法實現方法1:右上角開始搜索(推薦)方法2:逐行二分查找方法3:分治法方法4:左下角開始搜索復雜度分析核心要點數學證明右上角搜…

瘋狂星期四文案網第16天運營日記

網站運營第16天,點擊觀站: 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 昨日訪問量 昨日30多ip, 今天也差不多,同步上周下降了一些,感覺明天瘋狂星期四要少很多了,記得上周四700多ip&…

Linux系統基礎入門與配置指南

Linux基本概述與配置 一、我們為什么使用Linux(Linux的優點)開源與自由 免費: 無需支付許可費用,任何人都可以自由下載、安裝和使用。源代碼開放: 任何人都可以查看、修改和分發源代碼。這帶來了極高的透明度、安全性和…

如何刪除VSCode Marketplace中的publisher

網頁上并沒有提供刪除的按鈕,需要通過命令的形式刪除。 vsce delete-publisher [要刪除的名字]# 鍵入token # y 確認這里的token是之前在Azure DevOps中創建的token,忘了的話可以重建一個 刷新網頁看一下 成功刪除了。

Windows安裝git教程(圖文版)

Git 是一個分布式版本控制系統,用于跟蹤文件的變化,特別是在軟件開發中。它使得多個開發者可以在不同的機器上并行工作,然后將他們的改動合并在一起。是在開發過程中,經常會用到的一個工具。本章教程,主要介紹Windows上…

Remote Framebuffer Protocol (RFB) 詳解

RFC 6143 規范文檔:The Remote Framebuffer Protocol 文章目錄1. 引言2. 初始連接流程2.1 TCP連接建立2.2 協議版本協商2.3 安全握手3. 顯示協議機制3.1 核心概念3.2 像素格式4. 輸入協議4.1 鍵盤事件(KeyEvent)4.2 鼠標事件(PointerEvent)5. 協議消息詳解5.1 握手消…

從 DeepSeek-V3 到 Kimi K2:八種現代大語言模型架構設計

編譯:青稞社區Kimi 原文:https://magazine.sebastianraschka.com/p/the-big-llm-architecture-comparison 首發:https://mp.weixin.qq.com/s/lSM2jk1UxJVz1WllWYQ4aQ 自原始 GPT 架構開發以來已經過去了七年。乍一看,從 2019 年的…

linux驅動開發筆記--GPIO驅動開發

目錄 前言 一、設備樹配置 二、驅動編寫 三、用戶空間測試 總結 前言 開發平臺:全志A133,開發環境:linux4.9andrio10,開發板:HelperBoard A133_V2.5。 一、設備樹配置 打開板級設備樹配置文件,路徑&a…