最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中數(shù)據(jù)視圖操作詳解

 更新時(shí)間:2022年08月05日 08:33:53   作者:遇安.112  
視圖是從一個(gè)或多個(gè)表(或視圖)導(dǎo)出的表。視圖一經(jīng)定義,就可以像表一樣被查詢、修改、刪除和更新。本文就來和大家講講MySQL數(shù)據(jù)視圖的一些基本操作,需要的可以參考一下

1.視圖概述

視圖是從一個(gè)或多個(gè)表(或視圖)導(dǎo)出的表。視圖與表(有時(shí)為與視圖區(qū)別,也稱表為基本表)不同,視圖是一個(gè)虛表,即視圖所對應(yīng)的數(shù)據(jù)不進(jìn)行實(shí)際存儲(chǔ),數(shù)據(jù)庫中只存儲(chǔ)視圖的定義,對視圖的數(shù)據(jù)進(jìn)行操作時(shí),系統(tǒng)根據(jù)視圖的定義去操作與視圖相關(guān)聯(lián)的基本表。

視圖一經(jīng)定義,就可以像表一樣被查詢、修改、刪除和更新。使用視圖有下列優(yōu)點(diǎn):

1、為用戶集中數(shù)據(jù),簡化用戶的數(shù)據(jù)查詢和處理。有時(shí)用戶所需要的數(shù)據(jù)分散在多個(gè)表中,定義視圖可將它們集中在一起,從而方便用戶的數(shù)據(jù)查詢和處理。

2、屏蔽數(shù)據(jù)庫的復(fù)雜性。用戶不必了解復(fù)雜的數(shù)據(jù)庫中的表結(jié)構(gòu),并且數(shù)據(jù)庫表的更改也不影響用戶對數(shù)據(jù)庫的使用。

3、簡化用戶權(quán)限的管理。只須授予用戶使用視圖的權(quán)限,而不必指定用戶只能使用表的特定列,也增加了安全性。

4、便于數(shù)據(jù)共享。各用戶不必都定義和存儲(chǔ)自己所需的數(shù)據(jù),可共享數(shù)據(jù)庫的數(shù)據(jù),這樣同樣的數(shù)據(jù)只需存儲(chǔ)一次。

5、可以重新組織數(shù)據(jù)以便輸出到其他應(yīng)用程序中。

使用視圖時(shí),要注意下列事項(xiàng):

1、 在默認(rèn)情況下,將在當(dāng)前數(shù)據(jù)庫創(chuàng)建新視圖。要想在給定數(shù)據(jù)庫中明確創(chuàng)建視圖,創(chuàng)建時(shí)應(yīng)將名稱指定為db_name.view_name

2、視圖的命名必須遵循標(biāo)志符命名規(guī)則,不能與表同名,且對每個(gè)用戶視圖名必須是唯一的,即對不同用戶,即使是定義相同的視圖,也必須使用不同的名字。

3、不能把規(guī)則、默認(rèn)值或觸發(fā)器與視圖相關(guān)聯(lián)

4、不能在視圖上建立任何索引,包括全文索引

5、視圖中使用SELECT語句有以下的限制:

5.1、定義視圖的用戶必須對所參照的表或視圖有查詢(即可執(zhí)行SELECT語句)的權(quán)限,在定義中引用的表或視圖必須存在

5.2、不能包含F(xiàn)ROM子句中的子查詢,不能引用系統(tǒng)或用戶變量,不能引用預(yù)處理語句參數(shù)

5.3、在視圖定義中允許使用ORDER BY子句,但是,如果從特定視圖進(jìn)行了選擇,而該視圖使用了具有自己ORDER BY的語句,則視圖定義中的ORDER BY將被忽略。

1.1創(chuàng)建視圖

視圖的創(chuàng)建語法格式:

CREATE [ OR REPLACE ] VIEW 視圖名 [ ( 列名列表 ) ]
AS SELECT 語句
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

例:創(chuàng)建Bookstore數(shù)據(jù)庫上的jsj_sell視圖,包括計(jì)算機(jī)類圖書銷售的訂單號(hào)、圖書編號(hào)、書名等情況。其中要保證對該視圖的訂單修改都要符合計(jì)算機(jī)類這個(gè)條件 

CREATE OR REPLACE VIEW jsj_sell
AS
SELECT 訂單號(hào),Sell.圖書編號(hào),書名
FROM Book,Sell
WHERE Book.圖書編號(hào)=Sell.圖書編號(hào)
AND Book.圖書類別='計(jì)算機(jī)'
WITH CHECK OPTION;

例:創(chuàng)建Bookstore數(shù)據(jù)庫中計(jì)算機(jī)類圖書銷售視圖sale_avg,包括書名(在視圖中列名為name)和該圖書的平均訂購冊數(shù)(在視圖中列名為sale_avg) 

CREATE VIEW sale_avg(name,sale_avg)
AS 
SELECT 書名,avg(訂購冊數(shù))
FROM jsj_sell
GROUP BY 書名;

上面創(chuàng)建了計(jì)算機(jī)類圖書銷售視圖jsj_sell,可以直接從jsj_sell視圖中查詢信息生成新視圖。

1.2視圖的查詢

視圖定義后,就可以像查詢基本表那樣對視圖進(jìn)行查詢

例:在視圖jsj_sell中查找計(jì)算機(jī)類圖書的訂單號(hào)和訂購冊數(shù)

SELECT 訂單號(hào),訂購冊數(shù)
FROM jsj_sell;

例:查找平均訂購冊數(shù)大于5本的訂購客戶的身份證號(hào)和平均訂購冊數(shù)

1、創(chuàng)建客戶平均訂購視圖kh_avg,包括客戶身份證號(hào)和平均訂購冊數(shù)

CREATE VIEW kh_avg(sfz,order_avg)
AS
SELECT 身份證號(hào),AVG(訂購冊數(shù))
FROM Sell
GROUP BY 身份證號(hào);

2、對kh_avg視圖進(jìn)行查詢

SELECT *
FROM kh_avg
WHERE order_avg>5;

注意:使用視圖查詢時(shí),若其關(guān)聯(lián)的基本表中添加了新字段,則該視圖將不包含新字段。如果與視圖相關(guān)聯(lián)的表或視圖被刪除,則該視圖將不能再使用。

2.操作視圖

2.1通過視圖操作數(shù)據(jù)

2.1.1可更新視圖

要通過視圖更新基本表數(shù)據(jù),必須保證視圖是可更新視圖,即可以在INSET、UPDATE或DELETE等語句中使用它們。對于可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關(guān)系。有一些特定的其他結(jié)構(gòu),這類結(jié)構(gòu)會(huì)使得視圖不可更新。若視圖包含以下結(jié)構(gòu)中的任何一種,其就是不可更新的:

1、聚合函數(shù)

2、DISTINCT關(guān)鍵字

3、GROUP BY子句

4、ORDER BY子句

5、HAVING子句

6、UNION運(yùn)算符

7、位于選擇列表中的子查詢

8、FROM子句中包含多個(gè)表

9、SELECT語句中引用了不可更新視圖

10、WHERE子句中的子查詢,引用FROM子句中的表

MySQL在多表上創(chuàng)建視圖方法

2.1.2插入數(shù)據(jù)

當(dāng)使用視圖插入數(shù)據(jù)時(shí),如果在創(chuàng)建視圖時(shí)加上WITH CHECK OPTION子句,WITH CHECK OPTION子句會(huì)在更新數(shù)據(jù)時(shí)檢查新數(shù)據(jù)是否符合視圖定義中WHERE子句的條件。

WITH CHECK OPTION子句只能和可更新視圖一起使用。

例:創(chuàng)建視圖jsj_book,視圖中包含計(jì)算機(jī)類圖書的信息,并向jsj_book視圖中插入一條記錄:('IS-01','計(jì)算機(jī)','計(jì)算機(jī)基礎(chǔ)')

1、創(chuàng)建視圖jsj_book 

CREATE OR REPLACE VIEW jsj_book
AS
SELECT *
FROM Book
WHERE 圖書類別='計(jì)算機(jī)'
WITH CHECK OPTION;

2、插入記錄 

INSERT INTO jsj_book
VALUES('IS-01','計(jì)算機(jī)','計(jì)算機(jī)基礎(chǔ)');

當(dāng)視圖所依賴的基本表有多個(gè)時(shí),不能向該視圖插入數(shù)據(jù),因?yàn)檫@將會(huì)影響多個(gè)基本表。

對INSERT語句還有一個(gè)限制:SELECT語句中必須包含F(xiàn)ROM子句中指定表的所有不能為空的列。例如,若jsj_book視圖定義時(shí)不加上“書名”字段,則插入數(shù)據(jù)時(shí)會(huì)出錯(cuò)。

2.1.3修改數(shù)據(jù)

使用UPDATE語句可以實(shí)現(xiàn)通過視圖修改基本表數(shù)據(jù)。

例:將jsj_sell視圖中的圖書編號(hào)為IS-01的書名改為“MySQL基礎(chǔ)”

UPDATE jsj_sell
SET 書名='MySQL基礎(chǔ)'
WHERE 圖書編號(hào)='IS-01';

2.1.4刪除數(shù)據(jù)

如果視圖來源于單個(gè)基本表,可以使用DELETE語句通過視圖來刪除基本表數(shù)據(jù),對于依賴多個(gè)基本表的視圖,不能使用DELETE語句。

例:刪除jsj_book中“中國青年出版社”的記錄

DELETE FROM jsj_book
WHERE 出版社='中國青年出版社';

2.2修改視圖定義

可以使用ALTER VIEW語句對已有視圖的定義進(jìn)行修改

語法格式:

ALTER VIEW 視圖名[ ( 列名列表 ) ]
AS select語句
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

例:將jsj_book視圖修改為只包含計(jì)算機(jī)類圖書的圖書編號(hào)、書名和單價(jià)

ALTER VIEW jsj_book
AS
SELECT 圖書編號(hào),書名,單價(jià)
FROM Book
WHERE 圖書類別='計(jì)算機(jī)';

2.3刪除視圖

語法格式:DROP VIEW [ IF EXISTS ] 視圖名1 [, 視圖名2 ]...

若聲明了IF EXISTS,則視圖不存在的話也不會(huì)報(bào)錯(cuò)。使用DROP VIEW 一次可以刪除多個(gè)視圖。例:一次性刪除jsj_book和jsj_sell

DROP VIEW jsj_book,jsj_sell;

到此這篇關(guān)于MySQL中數(shù)據(jù)視圖操作詳解的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)視圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 安裝mysql noinstall zip版

    安裝mysql noinstall zip版

    沒用過mysql, 這幾天折騰django ,發(fā)現(xiàn)連接mssql好像還是有些小bug,為了防止日后項(xiàng)目有些莫名的db故障,故選擇django推薦之一的mysql
    2011-12-12
  • K8s中MySQL?數(shù)據(jù)持久化存儲(chǔ)的實(shí)現(xiàn)

    K8s中MySQL?數(shù)據(jù)持久化存儲(chǔ)的實(shí)現(xiàn)

    本文主要介紹了K8s中MySQL?數(shù)據(jù)持久化存儲(chǔ)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • MySQL實(shí)現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼

    MySQL實(shí)現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼

    在處理數(shù)據(jù)時(shí),我們常常會(huì)遇到需要將表中的列(字段)轉(zhuǎn)換為行,或?qū)⑿修D(zhuǎn)換為列的情況,這種操作通常被稱為“列轉(zhuǎn)行”(Pivoting)和“行轉(zhuǎn)列”(Unpivoting),本文將向您介紹如何使用 CASE 語句、聚合函數(shù)以及 GROUP BY 子句來完成列轉(zhuǎn)行和行轉(zhuǎn)列的操作
    2024-09-09
  • MySQL聯(lián)合索引用法示例

    MySQL聯(lián)合索引用法示例

    這篇文章主要介紹了MySQL聯(lián)合索引用法,結(jié)合實(shí)例形式分析了MySQL聯(lián)合索引的具體定義與使用方法,需要的朋友可以參考下
    2016-09-09
  • 解析如何加快mysql編譯的速度

    解析如何加快mysql編譯的速度

    本篇文章是對如何加快mysql編譯的速度進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL是怎么保證主備一致的

    MySQL是怎么保證主備一致的

    大家知道 binlog 可以用來歸檔,也可以用來做主備同步,但它的內(nèi)容是什么樣的呢?為什么備庫執(zhí)行了 binlog 就可以跟主庫保持一致了呢,本文就詳細(xì)的介紹一下
    2021-09-09
  • 一文帶大家由淺入深的了解MySQL底層查詢邏輯

    一文帶大家由淺入深的了解MySQL底層查詢邏輯

    這篇文章主要給大家詳細(xì)介紹了MySQL底層查詢邏輯,文中有詳細(xì)的代碼示例和圖文介紹,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀
    2023-06-06
  • MySQL中l(wèi)imit對查詢語句性能的影響

    MySQL中l(wèi)imit對查詢語句性能的影響

    我們知道,當(dāng)limit offset rows中的offset很大時(shí),會(huì)出現(xiàn)效率問題,那么如果提高limit的執(zhí)行效率呢
    2021-09-09
  • nacos只支持mysql的原因分析

    nacos只支持mysql的原因分析

    nacos的數(shù)據(jù)源獲取都是通過com.alibaba.nacos.config.server.service.datasource.DynamicDataSource來獲取的,在獲取數(shù)據(jù)源時(shí),根據(jù)配置判斷你到底是使用內(nèi)置的本地?cái)?shù)據(jù)庫還是外部的數(shù)據(jù)庫(mysql),本文給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-01-01
  • k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    本文是基于已有k8s環(huán)境下,介紹在k8s環(huán)境中部署mysql主從集群的實(shí)現(xiàn)步驟,對mysql學(xué)習(xí)有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2023-01-01

最新評論

永寿县| 克东县| 恩施市| 淮北市| 贞丰县| 普兰县| 嘉鱼县| 丰顺县| 滨州市| 商城县| 建昌县| 洛隆县| 郓城县| 巴青县| 临高县| 集贤县| 开化县| 绥阳县| 松桃| 台前县| 双江| 来凤县| 桐庐县| 齐齐哈尔市| 安岳县| 岫岩| 井陉县| 昆山市| 西城区| 河源市| 章丘市| 勃利县| 高雄县| 黄大仙区| 萍乡市| 定远县| 台南市| 盘锦市| 民和| 漯河市| 班玛县|