MySQL視圖介紹與實驗練習

文章目錄

  • 1. MySQL 中的視圖(View)簡介
    • 1.1 視圖的基本概念:
    • 1.2 創建視圖:
    • 1.3 查看視圖:
    • 1.4 更新視圖:
    • 1.5 刪除視圖:
    • 1.6 視圖的嵌套:
    • 1.7 權限管理:
    • 1.8 檢查視圖信息:
  • 2 關系型數據庫視圖和數據倉庫中子圖(Subset)的區別:
    • 2.1 關系型數據庫視圖:
    • 2.2 數據倉庫中的子圖:
  • 3 MySQL視圖實驗
    • 3.1 數據準備
      • 3.1.1 開發環境
      • 3.1.2 創建數據庫
      • 3.1.3 創建goods表
      • 3.1.4 插入goods表
      • 3.1.5 創建category表
      • 3.1.6 插入category表
    • 3.2 創建視圖
    • 3.3 修改視圖列
    • 3.4 查看視圖相關狀態
    • 3.5 另一種創建視圖的方式
    • 3.6 向視圖源表插入數據
    • 3.7 通過視圖更新數據
    • 3.8 刪除視圖中數據
    • 3.9 創建復雜篩選的視圖

1. MySQL 中的視圖(View)簡介

1.1 視圖的基本概念:

視圖是一種虛擬表,其內容由一個查詢定義。它提供了一種將復雜查詢邏輯封裝成可重用的結構的方式。

1.2 創建視圖:

使用 CREATE VIEW 語句可以創建視圖。例如:

CREATE VIEW my_view AS
SELECT column1, column2
FROM my_table
WHERE condition;

1.3 查看視圖:

使用 SELECT 語句可以查詢視圖。例如:

SELECT * FROM my_view;

1.4 更新視圖:

視圖可以被更新,但有一些限制。一般來說,只有滿足特定條件的視圖才能被更新,例如視圖中沒有使用 GROUP BYDISTINCT

1.5 刪除視圖:

使用 DROP VIEW 語句可以刪除視圖。例如:

DROP VIEW my_view;

1.6 視圖的嵌套:

視圖可以嵌套,即在一個視圖中引用另一個視圖。

1.7 權限管理:

視圖的訪問權限和表一樣,可以通過 GRANTREVOKE 語句進行管理。

1.8 檢查視圖信息:

可以通過 SHOW CREATE VIEW 或查詢 information_schema 數據庫中的相關表,如 VIEWS 表,來查看視圖的定義和信息。

2 關系型數據庫視圖和數據倉庫中子圖(Subset)的區別:

2.1 關系型數據庫視圖:

  1. 定義: 視圖是一個虛擬表,其內容是基于一個或多個基本表的查詢結果。視圖不存儲實際的數據,而是根據定義的查詢動態生成結果。

  2. 用途: 視圖通常用于簡化復雜查詢、提供安全性、隱藏底層表結構、以及在應用程序中重用查詢邏輯。

  3. 實時性: 視圖是實時的,即每次查詢都基于底層表的當前狀態生成結果。因此,當基礎表的數據發生變化時,視圖的結果也會隨之變化。

  4. 存儲: 視圖不存儲實際數據,它只存儲查詢定義。數據實際上仍存儲在底層的表中。

2.2 數據倉庫中的子圖:

  1. 定義: 在數據倉庫中,子圖通常指的是一個包含了數據倉庫中部分數據的子集。這個子集可能是根據某些特定條件(例如,特定時間范圍、特定業務區域等)而選擇的。

  2. 用途: 子圖用于分割大型數據倉庫的數據,以便更快地進行查詢和分析。它可以是一個按照某個維度劃分的區域,也可以是一個按照時間劃分的時間段。

  3. 歷史數據: 數據倉庫中的子圖可能包含歷史數據的快照,允許分析歷史趨勢和模式。

  4. 聚合: 子圖中的數據可能是經過預先計算或聚合的,以支持更快速的查詢和報告生成。

  5. 周期性更新: 數據倉庫中的子圖可能不是實時更新的,而是按照某個周期進行更新,以保持高性能查詢的同時降低數據倉庫的負載。


關系型數據庫視圖主要用于查詢和簡化數據庫的使用,而數據倉庫中的子圖則更側重于優化數據倉庫的性能,支持復雜的分析和報告需求。兩者在設計和使用上有不同的考慮因素,根據具體業務需求和數據特點選擇合適的技術。

3 MySQL視圖實驗

3.1 數據準備

3.1.1 開發環境

MySQL 8.1
Windows 11

3.1.2 創建數據庫

DROP DATABASE IF EXISTS shop;
CREATE DATABASE shop;
USE shop;

3.1.3 創建goods表

CREATE TABLE goods (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '商品id',category_id INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '分類id',name VARCHAR(120) NOT NULL DEFAULT '' COMMENT '名稱',keyword VARCHAR(255) NOT NULL DEFAULT '' COMMENT '關鍵詞',content TEXT NOT NULL COMMENT '詳情',price DECIMAL(10, 2) UNSIGNED NOT NULL DEFAULT 0 COMMENT '價格',stock INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '庫存',score DECIMAL(3, 2) UNSIGNED NOT NULL DEFAULT 0 COMMENT '評分',comment_count INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '評論計數'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.1.4 插入goods表

INSERT INTO goods (id, category_id, name, keyword, content,price,stock, score, comment_count) VALUES
(1, 3, '2B鉛筆', '文具', '考試專用', 0.5, 500, 4.9, 40000),
(2, 3, '鋼筆', '文具', '練字必不可少', 15, 300, 3.9, 500),
(3, 3, '碳素筆', '文具', '平時使用', 1, 500, 5, 98000),
(4, 12, '超薄筆記本', '電子產品', '輕小便攜', 5999, 0, 2.5, 200),
(5, 6, '智能手機', '電子產品', '人人必備', 1999, 0, 5, 98000),
(6, 8, '桌面音箱', '電子產品', '擴音裝備', 69, 750, 4.5, 1000),
(7, 9, '頭戴耳機', '電子產品', '獨享個人世界', 109, 0, 3.9, 500),
(8, 10, '辦公電腦', '電子產品', '適合辦公', 2000, 0, 4.8, 6000),
(9, 15, '收腰風衣', '服裝', '春節潮流單品', 299, 0, 4.9, 40000),
(10, 16, '薄毛衣', '服裝', '居家旅行必備', 48, 0, 4.8, 98000);

3.1.5 創建category表

CREATE TABLE category (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '分類id',parent_id INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '上級分類id',name VARCHAR(100) NOT NULL DEFAULT '' COMMENT '名稱',sort INT NOT NULL DEFAULT 0 COMMENT '排序',is_show TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否顯示',create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',update_time DATETIME DEFAULT NULL COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.1.6 插入category表

INSERT INTO category (id, parent_id, name) VALUES
(1, 0, '辦公'), (2, 1, '耗材'), (3, 2, '文具'),
(4, 0, '電子產品'), (5, 4, '通訊'), (6, 5, '手機'),
(7, 4, '影音'), (8, 7, '音箱'), (9, 7, '耳機'),
(10, 4, '電腦'), (11, 10, '臺式電腦'), (12, 10, '筆記本'),
(13, 0, '服裝'), (14, 13, '女裝'), (15, 14, '風衣'), (16, 14, '毛衣');

3.2 創建視圖

create view gc_views as 
select goods.id, goods.name,category.name as category_name
from goods
join category on goods.category_id = category.id;

3.3 修改視圖列

ALTER VIEW gc_views AS
SELECT id, name
FROM goods;

3.4 查看視圖相關狀態

select * from gc_views;desc gc_viewsshow create table gc_views

3.5 另一種創建視圖的方式

CREATE OR REPLACE VIEW gc_views AS
SELECT goods.id, goods.name FROM goods;

3.6 向視圖源表插入數據


INSERT INTO goods (id,name)VALUES (11, '圖書');INSERT INTO goods (id, name, content)
VALUES (11, '圖書', 'hahaha');

3.7 通過視圖更新數據

UPDATE gc_views
SET name = '家電'
WHERE id = 11;

3.8 刪除視圖中數據

DELETE FROM gc_views
WHERE id = 11;

3.9 創建復雜篩選的視圖

CREATE VIEW v1 AS
SELECT id, name
FROM category
WHERE id < 30;CREATE VIEW v2 AS
SELECT id, name
FROM v1
WHERE id > 20;

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

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

相關文章

vuepress-----15、md用法進階

vuepress markdown說明文檔 https://www.vuepress.cn/guide/markdown.html # 示例&#xff1a;封裝countUp.js為Vue組件 https://github.com/inorganik/countUp.js https://inorganik.github.io/countUp.js/ # 安裝 yarn add countup.js# 創建vue文件 全局Vue組件存放位置…

web項目服務器后臺運行

阿里官方方法 在Linux系統的ECS實例內,當斷開SSH客戶端后,如何保持進程繼續運行的解決方案_云服務器 ECS-阿里云幫助中心 (aliyun.com)

<Linux>(極簡關鍵、省時省力)《Linux操作系統原理分析之文件管理(1)》(22)

《Linux操作系統原理分析之文件管理&#xff08;1&#xff09;》&#xff08;22&#xff09; 7 文件管理7.1 文件與文件系統7.1.1 文件7.1.3 文件系統及其功能 7.2 文件的組織結構7.2.1 文件的邏輯結構7.2.2 文件的物理結構一、順序結構&#xff08;順序文件或連續文件&#xf…

Java來實現二叉樹算法,將一個二叉樹左右倒置(左右孩子節點互換)

文章目錄 二叉樹算法二叉樹左右變換數據 今天來和大家談談常用的二叉樹算法 二叉樹算法 二叉樹左右變換數據 舉個例子&#xff1a; Java來實現二叉樹算法&#xff0c;將一個二叉樹左右倒置&#xff08;左右孩子節點互換&#xff09;如下圖所示 實現的代碼如下&#xff1a;以…

ECharts的顏色漸變

目錄 一、直接配置參數實現顏色漸變 二、使用ECharts自帶的方法實現顏色漸變 一、兩種漸變的實現方法 1、直接配置參數實現顏色漸變 橫向的漸變&#xff1a; //主要代碼 option {xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yA…

云上巴蜀丨云軸科技ZStack成功實踐精選(川渝)

巴蜀——古政權必爭之地 不僅擁有優越的戰略位置 而且擁有豐富的自然資源&#xff0c;悠久的歷史文化 如今的川渝經濟、人口發展迅速 2023年前三季度&#xff0c;四川與重慶GDP增速均超過國家平均線&#xff0c;為6.5%為5.6% 川渝經濟發展帶動數字化發展浪潮 云軸科技ZSt…

打造專屬小程序,喬拓云模板平臺助力商家搶占先機

打造專屬小程序&#xff0c;喬拓云模板平臺助力商家搶占先機&#xff01;該平臺涵蓋全行業小程序模板&#xff0c;一鍵復制即可上線。 想要快速創建高效實用的小程序&#xff0c;喬拓云小程序模板開發平臺為您提供了解決方案&#xff01;我們為您提供一系列精心設計的小程序模板…

LeetCode Hot100 131.分割回文串

題目&#xff1a; 給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 方法&#xff1a;靈神-子集型回溯 假設每對相鄰字符之間有個逗號&#xff0c;那么就看…

[c++]—string類___深度學習string標準庫成員函數與非成員函數(string的增刪查改函數)

沉淀,沉淀,再沉淀. &#x1f469;&#x1f3fb;?&#x1f4bb;作者:chlorine &#x1f449;上一篇&#xff1a;string標準庫成員函數和非成員函數(上) 目錄 &#x1f36d;構造和析構的實現 &#x1f36d; string→c類型的字符串數組 &#x1f36d;operator[]類對象元素的訪…

c語言-動態內存管理

文章目錄 一、為什么會有動態內存管理二、申請內存函數1、malloc2、free3、calloc4、realloc 三、常見的動態內存的錯誤四、練習 一、為什么會有動態內存管理 1.我們一般的開辟空間方式&#xff1a; int a 0;//申請4個字節空間 int arr[10] { 0 };//申請40個字節空間2.這樣…

解決在Linux中進行redis的主從復制時出現的從機可以獲取到主機的信息,主機獲取不到從機的信息~

主機&#xff1a; 從機1&#xff1a; 從機2&#xff1a; 出現上述的原因是我在redis.conf中設置了密碼&#xff0c;那么就導致了我在進行主從復制時&#xff0c;需要進行密碼驗證&#xff0c;然后我在網上查閱了很多資料&#xff0c;有的說讓在從機中指定密碼&#xff0c;有的說…

一對多聊天室

多人聊天包 由于要先創建服務面板&#xff0c;接收客戶端連接的信息&#xff0c;此代碼使用順序為先啟動服務端&#xff0c;在啟動客戶端&#xff0c;服務端不用關&#xff0c;不然會報錯。多運行幾次客戶端&#xff0c;實現單人聊天 創建服務面板 package yiduiduo;import j…

【頭歌系統數據庫實驗】實驗7 SQL的復雜多表查詢-1

目錄 第1關&#xff1a;求各顏色零件的平均重量 第2關&#xff1a;求北京和天津供應商的總個數 第3關&#xff1a;求各供應商供應的零件總數 第4關&#xff1a;求各供應商供應給各工程的零件總數 第5關&#xff1a;求重量大于所有零件平均重量的零件名稱 第6關&#xff1…

初識人工智能,一文讀懂人工智能概論(1)

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

Python Django-allauth: 構建全面的用戶身份驗證系統

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com Django-allauth是一個功能強大的Django插件&#xff0c;旨在簡化和定制Web應用程序中的用戶身份驗證和管理。本文將深入介紹Django-allauth的核心功能、基本用法以及實際應用場景&#xff0c;通過豐富的示例代碼…

AWTK 串口屏開發(1) - Hello World

1. 功能 這個例子很簡單&#xff0c;制作一個調節溫度的界面。在這里例子中&#xff0c;模型&#xff08;也就是數據&#xff09;里只有一個溫度變量&#xff1a; 變量名數據類型功能說明溫度整數溫度。范圍 (0-100) 攝氏度 2. 創建項目 從模板創建項目&#xff0c;將 hmi/…

挑選在線客服系統的七大注意事項

越來越多的企業開始注重客戶服務&#xff0c;所以在線客服系統也逐漸成為了電商企業不可或缺的一部分。然而在挑選在線客服系統的過程中&#xff0c;蠻多企業會遇到各種各樣的問題&#xff0c;這就導致了最終選擇的系統并不適合自己企業的需求。接下來我將提醒大家挑選在線客服…

網絡運維與網絡安全 學習筆記2023.12.4

網絡運維與網絡安全 學習筆記 第三十四天 今日目標 訪問存儲設備、配置yum源、使用yum管理軟件 LAMP部署及測試、systemctl系統控制、SELinux-Firewall防護 訪問存儲設備 掛載/卸載設備 什么是掛載? 掛載&#xff0c;裝載 將光盤/U盤/分區/網絡存儲等設備裝到某個Linux目…

mysql中IGNORE 關鍵字段用法

在MySQL中&#xff0c;IGNORE 關鍵字通常與數據修改語句&#xff08;如INSERT、UPDATE和DELETE&#xff09;一起使用&#xff0c;其作用是使得操作在遇到錯誤時不會終止執行&#xff0c;而是忽略錯誤并繼續處理后續的數據。這對于處理可能包含重復鍵值或某些違反約束的批量操作…