mysql資料庫視圖教程,資料庫視圖操作

本文目錄一覽:

mysql中如何建立視圖?

在查詢頁面用語句創建就可以。

1、打開Navicat for MySQL,並登錄到指定資料庫。

2、點擊上方查詢。

3、點擊新建查詢。

4、在空白處寫上視圖創建語句,點擊左上方執行即可。

如何在MySQL中創建視圖?

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\x0d\x0a VIEW view_name [(column_list)]\x0d\x0a AS select_statement\x0d\x0a [WITH [CASCADED | LOCAL] CHECK OPTION]\x0d\x0a\x0d\x0a該語句能創建新的視圖,如果給定了OR REPLACE子句,該語句還能替換已有的視圖。select_statement是一種SELECT語句,它給出了視圖的定義。該語句可從基表或其他視圖進行選擇。\x0d\x0a該語句要求具有針對視圖的CREATE VIEW許可權,以及針對由SELECT語句選擇的每一列上的某些許可權。對於在SELECT語句中其他地方使用的列,必須具有SELECT許可權。如果還有OR REPLACE子句,必須在視圖上具有DROP許可權。\x0d\x0a視圖屬於資料庫。在默認情況下,將在當前資料庫創建新視圖。要想在給定資料庫中明確創建視圖,創建時,應將名稱指定為db_name.view_name。\x0d\x0amysql CREATE VIEW test.v AS SELECT * FROM t;\x0d\x0a\x0d\x0a表和視圖共享資料庫中相同的名稱空間,因此,資料庫不能包含具有相同名稱的表和視圖。\x0d\x0a視圖必須具有唯一的列名,不得有重複,就像基表那樣。默認情況下,由SELECT語句檢索的列名將用作視圖列名。要想為視圖列定義明確的名稱,可使用可選的column_list子句,列出由逗號隔開的ID。column_list中的名稱數目必須等於SELECT語句檢索的列數。\x0d\x0aSELECT語句檢索的列可以是對錶列的簡單引用。也可以是使用函數、常量值、操作符等的表達式。\x0d\x0a對於SELECT語句中不合格的表或視圖,將根據默認的資料庫進行解釋。通過用恰當的資料庫名稱限定表或視圖名,視圖能夠引用表或其他資料庫中的視圖。\x0d\x0a能夠使用多種SELECT語句創建視圖。視圖能夠引用基表或其他視圖。它能使用聯合、UNION和子查詢。SELECT甚至不需引用任何錶。在下面的示例中,定義了從另一表選擇兩列的視圖,並給出了根據這些列計算的表達式:\x0d\x0amysql CREATE TABLE t (qty INT, price INT);\x0d\x0amysql INSERT INTO t VALUES(3, 50);\x0d\x0amysql CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\x0d\x0amysql SELECT * FROM v;\x0d\x0a+——+——-+——-+\x0d\x0a| qty | price | value |\x0d\x0a+——+——-+——-+\x0d\x0a| 3 | 50 | 150 |\x0d\x0a+——+——-+——-+\x0d\x0a\x0d\x0a視圖定義服從下述限制:\x0d\x0a· SELECT語句不能包含FROM子句中的子查詢。\x0d\x0a· SELECT語句不能引用系統或用戶變數。\x0d\x0a· SELECT語句不能引用預處理語句參數。\x0d\x0a· 在存儲子程序內,定義不能引用子程序參數或局部變數。\x0d\x0a· 在定義中引用的表或視圖必須存在。但是,創建了視圖後,能夠捨棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用CHECK TABLE語句。\x0d\x0a· 在定義中不能引用TEMPORARY表,不能創建TEMPORARY視圖。\x0d\x0a· 在視圖定義中命名的表必須已存在。\x0d\x0a· 不能將觸發程序與視圖關聯在一起。\x0d\x0a在視圖定義中允許使用ORDER BY,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己ORDER BY的語句,它將被忽略。\x0d\x0a對於定義中的其他選項或子句,它們將被增加到引用視圖的語句的選項或子句中,但效果未定義。例如,如果在視圖定義中包含LIMIT子句,而且從特定視圖進行了選擇,而該視圖使用了具有自己LIMIT子句的語句,那麼對使用哪個LIMIT未作定義。相同的原理也適用於其他選項,如跟在SELECT關鍵字後的ALL、DISTINCT或SQL_SMALL_RESULT,並適用於其他子句,如INTO、FOR UPDATE、LOCK IN SHARE MODE、以及PROCEDURE。\x0d\x0a如果創建了視圖,並通過更改系統變數更改了查詢處理環境,會影響從視圖獲得的結果:\x0d\x0amysql CREATE VIEW v AS SELECT CHARSET(CHAR(65)), COLLATION(CHAR(65));\x0d\x0aQuery OK, 0 rows affected (0.00 sec)\x0d\x0a \x0d\x0amysql SET NAMES ‘latin1’;\x0d\x0aQuery OK, 0 rows affected (0.00 sec)\x0d\x0a \x0d\x0amysql SELECT * FROM v;\x0d\x0a+——————-+———————+\x0d\x0a| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |\x0d\x0a+——————-+———————+\x0d\x0a| latin1 | latin1_swedish_ci |\x0d\x0a+——————-+———————+\x0d\x0a1 row in set (0.00 sec)\x0d\x0a \x0d\x0amysql SET NAMES ‘utf8’;\x0d\x0aQuery OK, 0 rows affected (0.00 sec)\x0d\x0a \x0d\x0amysql SELECT * FROM v;\x0d\x0a+——————-+———————+\x0d\x0a| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |\x0d\x0a+——————-+———————+\x0d\x0a| utf8 | utf8_general_ci |\x0d\x0a+——————-+———————+\x0d\x0a1 row in set (0.00 sec)\x0d\x0a\x0d\x0a可選的ALGORITHM子句是對標準SQL的MySQL擴展。ALGORITHM可取三個值:MERGE、TEMPTABLE或UNDEFINED。如果沒有ALGORITHM子句,默認演算法是UNDEFINED(未定義的)。演算法會影響MySQL處理視圖的方式。\x0d\x0a對於MERGE,會將引用視圖的語句的文本與視圖定義合併起來,使得視圖定義的某一部分取代語句的對應部分。\x0d\x0a對於TEMPTABLE,視圖的結果將被置於臨時表中,然後使用它執行語句。\x0d\x0a對於UNDEFINED,MySQL將選擇所要使用的演算法。如果可能,它傾向於MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。\x0d\x0a明確選擇TEMPTABLE的1個原因在於,創建臨時表之後、並在完成語句處理之前,能夠釋放基表上的鎖定。與MERGE演算法相比,鎖定釋放的速度更快,這樣,使用視圖的其他客戶端不會被屏蔽過長時間。\x0d\x0a視圖演算法可以是UNDEFINED,有三種方式:\x0d\x0a· 在CREATE VIEW語句中沒有ALGORITHM子句。\x0d\x0a· CREATE VIEW語句有1個顯式ALGORITHM = UNDEFINED子句。\x0d\x0a· 為僅能用臨時表處理的視圖指定ALGORITHM = MERGE。在這種情況下,MySQL將生成告警,並將演算法設置為UNDEFINED。\x0d\x0a正如前面所介紹的那樣,通過將視圖定義中的對應部分合併到引用視圖的語句中,對MERGE進行處理。在下面的示例中,簡要介紹了MERGE的工作方式。在該示例中,假定有1個具有下述定義的視圖v_merge:\x0d\x0aCREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS\x0d\x0aSELECT c1, c2 FROM t WHERE c3 100;\x0d\x0a\x0d\x0a示例1:假定發出了下述語句:\x0d\x0aSELECT * FROM v_merge;\x0d\x0a\x0d\x0aMySQL以下述方式處理語句:\x0d\x0a· v_merge成為t\x0d\x0a· *成為vc1、vc2,與c1、c2對應\x0d\x0a· 增加視圖WHERE子句\x0d\x0a所產生的將執行的語句為:\x0d\x0aSELECT c1, c2 FROM t WHERE c3 100;\x0d\x0a\x0d\x0a示例2:假定發出了下述語句:\x0d\x0aSELECT * FROM v_merge WHERE vc1 100) AND (c1

回答於 2022-11-16

MySQL視圖

使用示例

使用示例

使用示例

檢查選項的使用

mysql是可以基於視圖創建視圖,它會檢查視圖所依賴的視圖的規則

如果再基於v2創建視圖v3,v3沒有定義檢查選項,則此時向v3中插入數據時,不會檢查是否滿足v3的條件,但是會檢查是否滿足v2和v1的條件

local選項相比於cascaded,不會自動向上添加選項

如創建一個視圖,此時視圖中只包含一條數據

例如,現要查詢每個學生選修的課程(多對多,三張表),將SQL保存到視圖,以後再想查詢,直接select * from 視圖即可

mysql 視圖

1、什麼是視圖

視圖:MySQL從5.0.1版本開始提供視圖功能。一種虛擬存在的表,行和列的數據來自定義視圖的查詢中使用的表,並且是在使用視圖時動態生成的,只保存了sql邏輯,不保存查詢結果

2、視圖應用場景

多個地方用到同樣的查詢結果該查詢結果使用的sql語句較複雜

4、視圖的好處

使用簡單安全數據獨立 

5、創建或者修 改視圖

創建視圖的語法:

修改視圖的語法

6、視圖更新性

視圖的可更新性和視圖中查詢的定義有關係,以下類型的視圖是不能更新的。(1)包含以下關鍵字的sql語句:分組函數、distinct、group  by、having、union或者union all(2)常量視圖(3)Select中包含子查詢(4)join(5)from一個不能更新的視圖(6)where子句的子查詢引用了from子句中的表

7、刪除視圖的語法

用戶可以一次刪除一個或者多個視圖,前提是必須有該視圖的drop許可權。

8、查看視圖結構的語法

show tables;如果需要查詢某個視圖的定義,可以使用show create view命令進行查看

如何在MySQL中利用資料庫表創建視圖

為了不影響其他的資料庫表,新建一張資料庫表t_worker_info,代碼如下:

create

table

t_worker_info(

id

int(8)

primary

key

not

null

auto_increment,

w_id

int(10)

not

null,

w_name

varchar(20)

not

null,

w_age

int(3),

w_sex

varchar(10),

w_birth

varchar(20)

);

創建t_worker_info後,查看一下數據結構,代碼如下:

desc

t_worker_info;

雙擊選中的資料庫,在views滑鼠右鍵「create

view…」,打開編輯窗口,並在窗口中輸入代碼,代碼如下:

create

view

`view_worker_info`

as

select

*

from

t_worker_info;

查看創建視圖的基本信息,利用desc或describe語句,代碼如下:

desc

view_worker_info;

查看視圖信息,如存儲引擎、數據長度等,如果上述指標都為null,說明視圖是虛表,代碼如下:

show

table

status

like

‘view_worker_info’;

查看創建視圖的詳細信息,需要用到show

create

view

視圖名,代碼如下:

show

create

view

view_worker_info;

mysql資料庫建立視圖

在查詢頁面用語句創建就可以。

1、打開Navicat for MySQL,並登錄到指定資料庫。

2、點擊上方查詢。

3、點擊新建查詢。

4、在空白處寫上視圖創建語句,點擊左上方執行即可。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/181532.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-23 06:41
下一篇 2024-11-23 06:41

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29

發表回復

登錄後才能評論