網(wǎng)站上的動(dòng)圖都怎么做的成都建設(shè)網(wǎng)官網(wǎng)
文章目錄
- 創(chuàng)建視圖
- 修改視圖
- 刪除視圖
- 通過視圖更新數(shù)據(jù)
- 1. 插入數(shù)據(jù)
- 2. 更新數(shù)據(jù)
- 3. 刪除數(shù)據(jù)
- 查看視圖信息
- 1. DESCRIBE
- 2. SHOW TABLE STATUS
- 3. SHOW CREATE VIEW
- 4. 在views表中查看
數(shù)據(jù)庫中的視圖是一個(gè)虛擬表。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。行和列數(shù)據(jù)來自定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。
創(chuàng)建視圖
創(chuàng)建視圖的語法和創(chuàng)建表的語法基本是一樣的,格式如下:
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
上述語句可能創(chuàng)建新的視圖,如果給定了OR REPLACE子句,該語句還能替換已有的視圖。select_statement是一種SELECT語句,它給出了視圖的定義,它可以從基表或其他視圖進(jìn)行選擇。
參數(shù)含義:
- ALGORITHM:可選參數(shù),表示視圖選擇的算法。
- UNDEFINED:MySQL將自動(dòng)選擇要使用的算法。
- MERGE:將視圖的語句與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應(yīng)部分。
- TEMPTABLE:將視圖的結(jié)果存入臨時(shí)表,然后使用臨時(shí)表執(zhí)行語句。
- WITH CHECK OPTION:可選參數(shù),表示更新視圖時(shí)要保證在視圖的權(quán)限范圍內(nèi)。
- CASCADED:更新視圖時(shí)要滿足所有相關(guān)視圖和表的條件才進(jìn)行更新。
- LOCAL:更新視圖時(shí),要滿足該視圖本身定義的條件即可更新。
創(chuàng)建視圖語句要求具有針對視圖的CREATE VIEW權(quán)限,以及針對由SELECT語句選擇的每一列上的某些權(quán)限。
對于在SELECT語句中其他地方使用的列,必須具有SELECT權(quán)限。
如果有OR REPLACE子句,必須在視圖上具有DROP權(quán)限。
表和視圖共享數(shù)據(jù)庫中相同的名稱空間,因此,數(shù)據(jù)庫不能包含具有相同名稱的表和視圖。
視圖必須具有唯一的列名,不得有重復(fù),就像基表那樣。默認(rèn)情況下,由SELECT語句檢索的列名將用作視圖列名。如果想為視圖列定義明確的名稱,可使用可選的column_list子句,列出由逗號隔開的ID。column_list中的名稱數(shù)目必須等于SELECT語句檢索的列數(shù)。
SELECT語句檢索的列可以是對表中列的簡單引用 ,也可以是使用函數(shù)、常量值、操作符等的表達(dá)式。
修改視圖
除了使用CREATE OR REPLACE VIEW修改視圖外,也可以使用ALTER修改視圖,語法如下:
ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
刪除視圖
數(shù)據(jù)庫中的任何對象都會(huì)占用數(shù)據(jù)庫的存儲(chǔ)空間,視圖也不例外。當(dāng)視圖不再使用時(shí),要及時(shí)刪除數(shù)據(jù)庫中多余的視圖。
DROP VIEW [schema_name.]view_name1, view_name2, ...;
視圖一旦刪除,就不可恢復(fù),所以要謹(jǐn)慎操作。
通過視圖更新數(shù)據(jù)
通過視圖更新數(shù)據(jù)是指通過視圖來插入、更新、刪除表中的數(shù)據(jù),通過視圖更新數(shù)據(jù)的方法有3種,分別是INSERT、UPDATE和DELETE。視圖是一個(gè)虛擬表,其中沒有數(shù)據(jù)。因此,通過視圖更新數(shù)據(jù)時(shí)都是轉(zhuǎn)到基表進(jìn)行更新的。
1. 插入數(shù)據(jù)
使用INSERT語句可以向單個(gè)基本表組成的視圖中插入數(shù)據(jù),而不能向兩個(gè)表或多個(gè)表組成的視圖中插入數(shù)據(jù)。
INSERT INTO view_name VALUES(value1, value2, ...);
2. 更新數(shù)據(jù)
UPDATE view_name SET name1=value1, name2=value2, ... where_statement;
3. 刪除數(shù)據(jù)
DELETE FROM view_name where_statement;
查看視圖信息
1. DESCRIBE
使用DESCRIBE語句不僅可以查看數(shù)據(jù)表的基本信息,還可以查看視圖的基本信息。視圖也是一個(gè)表,它是一個(gè)虛擬表。
DESCRIBE view_name;
# 等價(jià)
DESC view_name;
2. SHOW TABLE STATUS
SHOW TABLE STATUS LIKE 'view_name';
3. SHOW CREATE VIEW
使用SHOW CREATE VIEW可以查看視圖元信息,語法如下:
SHOW CREATE VIEW view_name;
4. 在views表中查看
在MySQL中,所有視圖的定義都存在information_schema數(shù)據(jù)庫下的views表中。查詢該表,可以查看數(shù)據(jù)庫中所有視圖的詳細(xì)信息,語法如下:
SELECT * FROM information_schema.views;