MySQL視圖

1.創建視圖
創建視圖的語法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
其中,CREATE:表示新建視圖;
REPLACE:表示替換已有視圖;
ALGORITHM :表示視圖選擇算法;
view_name :視圖名;
column_list:屬性列;
select_statement:表示select語句。
[WITH [CASCADED | LOCAL] CHECK OPTION]參數表示視圖在更新時保證在視圖的權限範圍之內。
可選的ALGORITHM子句是對標準SQL的MySQL擴展。
ALGORITHM可取三個值:MERGE、TEMPTABLE或UNDEFINED。
對於MERGE,會將引用視圖的語句的文本與視圖定義合併起來,使得視圖定義的某一部分取代語句的對應部分。
對於TEMPTABLE,視圖的結果將被置於臨時表中,然後使用它執行語句。
對於UNDEFINED,MySQL自己選擇所要使用的算法。
如果可能,它傾向於MERGE而不是TEMPTABLE,這是因爲MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。
LOCAL和CASCADED爲可選參數,決定了檢查測試的範圍,默認值爲CASCADED。
CREATE VIEW stu_class(id,NAME,glass) AS SELECT student.`stuno`,student.`stuname`,stuinfo.`class` FROM student ,stuinfo WHERE student.`stuno`=stuinfo.`stuno`
SELECT * FROM stu_class
2.查看視圖
查看視圖必須要有SHOW VIEW權限。
查看視圖的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW。
DESCRIBE stu_class;
SHOW TABLE STATUS LIKE 'stu_class';
SHOW CREATE VIEW stu_class;
3.修改視圖
MYSQL中通過CREATE OR REPLACE VIEW 語句和ALTER語句來修改視圖
語法如下:
ALTER OR REPLACE [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
該語句用於更改已有視圖的定義。其語法與CREATE VIEW類似。當視圖不存在時創建,存在時進行修改。
實例:

DELIMITER $$
CREATE OR REPLACE VIEW `stu_class` AS 
SELECT
  `student`.`stuno`   AS `id`
FROM (`student` JOIN `stuinfo`)
WHERE (`student`.`stuno` = `stuinfo`.`stuno`)$$
DELIMITER;
DESC stu_class;
alter語句修改視圖:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION];
使用ALTER語句修改視圖 stu_class:
ALTER VIEW  stu_class AS SELECT stuno FROM student;
使用DESC查看:
DESC stu_class;
4.更新視圖
UPDATE stu_class SET stuname='xiaofang' WHERE stuno=2
DELETE FROM stu_class WHERE stuno=1
INSERT INTO stu_class VALUES(6,'haojie');
當視圖中包含如下內容的時候,視圖的更新操作將不能被執行。
(1)視圖中包含基本中被定義爲非空的列;
(2)定義視圖的SELECT語句後的字段列表中使用了數學表達式;
(3)定義視圖的SELECT語句後的字段列表中使用聚合函數;
(4)定義視圖的SELECT語句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句。
5.刪除視圖
刪除視圖使用DROP VIEW語法:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
DROP VIEW能夠刪除1個或多個視圖。必須在每個視圖上擁有DROP權限。
可以使用關鍵字IF EXISTS來防止因不存在的視圖而出錯。
刪除stu_class視圖:
DROP VIEW IF EXISTS stu_class 
如果名稱爲 stu_class 的視圖存在則刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章