MySQL管理視圖

在本教學中,您將學習如何管理MySQL中的視圖,包括顯示,修改和刪除視圖。

查看視圖定義

MySQL提供了用於顯示視圖定義的SHOW CREATE VIEW語句。

以下是SHOW CREATE VIEW語句的語法:

SHOW CREATE VIEW [database_name].[view_ name];

要顯示視圖的定義,需要在SHOW CREATE VIEW子句之後指定視圖的名稱。

為了更好的演示,我們先來創建一個視圖

假設根據employees表創建一個簡單的視圖用來顯示公司組織結構:

USE zaixiandb;
CREATE VIEW organization AS
    SELECT
        CONCAT(E.lastname, E.firstname) AS Employee,
        CONCAT(M.lastname, M.firstname) AS Manager
    FROM
        employees AS E
            INNER JOIN
        employees AS M ON M.employeeNumber = E.ReportsTo
    ORDER BY Manager;

從以上視圖中查詢數據,得到以下結果 -

mysql> SELECT * FROM organization;
+------------------+------------------+
| Employee         | Manager          |
+------------------+------------------+
| BondurLoui       | BondurGerard     |
| CastilloPamela   | BondurGerard     |
| JonesBarry       | BondurGerard     |
| HernandezGerard  | BondurGerard     |
.......此處省略了一大波數據.......
| KatoYoshimi      | NishiMami        |
| KingTom          | PattersonWilliam |
| MarshPeter       | PattersonWilliam |
| FixterAndy       | PattersonWilliam |
+------------------+------------------+
24 rows in set

要顯示視圖的定義,請使用SHOW CREATE VIEW語句如下:

SHOW CREATE VIEW organization;

還可以使用任何純文本編輯器(如記事本)顯示視圖的定義,以打開資料庫檔夾中的視圖定義檔。

例如,要打開organization視圖定義,可以使用以下路徑找到視圖定義檔:\data\zaixiandb\organization.frm

但是,不應該直接在.frm檔中修改視圖的定義。

修改視圖

MySQL提供兩個語句,允許您修改現有視圖:ALTER VIEWCREATE OR REPLACE VIEW

使用ALTER VIEW語句修改視圖

創建視圖後,可以使用ALTER VIEW語句修改視圖。

ALTER VIEW語句的語法類似於CREATE VIEW語句,除了CREATE關鍵字被ALTER關鍵字替換外,其他都一樣。

ALTER
 [ALGORITHM =  {MERGE | TEMPTABLE | UNDEFINED}]
  VIEW [database_name].  [view_name]
   AS
 [SELECT  statement]

以下語句通過添加email列來演示如何修改organization視圖。

ALTER VIEW organization
  AS
  SELECT CONCAT(E.lastname,E.firstname) AS Employee,
         E.email AS  employeeEmail,
         CONCAT(M.lastname,M.firstname) AS Manager
  FROM employees AS E
  INNER JOIN employees AS M
    ON M.employeeNumber = E.ReportsTo
  ORDER BY Manager;

要驗證更改,可以從organization視圖中查詢數據:

SELECT
    *
FROM
    Organization;

執行上面查詢語句,得到以下結果 -



使用CREATE OR REPLACE VIEW語句修改視圖

ALTER VIEW語句外,還可以使用CREATE OR REPLACE VIEW語句來創建或替換現有視圖。如果一個視圖已經存在,MySQL只會修改視圖。如果視圖不存在,MySQL將創建一個新的視圖。

以下語句使用CREATE OR REPLACE VIEW語法根據employees表創建一個名稱為v_contacts的視圖:

CREATE OR REPLACE VIEW v_contacts AS
    SELECT
        firstName, lastName, extension, email
    FROM
        employees;
-- 查詢視圖數據
SELECT * FROM v_contacts;

執行上面查詢語句,得到以下結果 -

+-----------+-----------+-----------+--------------------------------+
| firstName | lastName  | extension | email                          |
+-----------+-----------+-----------+--------------------------------+
| Diane     | Murphy    | x5800     | dmurphy@xuhuhu.com             |
| Mary      | Hill      | x4611     | mary.hill@xuhuhu.com           |
| Jeff      | Firrelli  | x9273     | jfirrelli@xuhuhu.com           |
| William   | Patterson | x4871     | wpatterson@xuhuhu.com          |
| Gerard    | Bondur    | x5408     | gbondur@gmail.com              |
| Anthony   | Bow       | x5428     | abow@gmail.com                 |
| Leslie    | Jennings  | x3291     | ljennings@xuhuhu.com           |
.............. 此處省略了一大波數據 ..................................
| Martin    | Gerard    | x2312     | mgerard@gmail.com              |
| Lily      | Bush      | x9111     | lilybush@yiiibai.com           |
| John      | Minsu     | x9112     | johnminsu@classicmodelcars.com |
+-----------+-----------+-----------+--------------------------------+
25 rows in set

假設您要將職位(jobtitle)列添加到v_contacts視圖中,只需使用以下語句 -

CREATE OR REPLACE VIEW v_contacts AS
    SELECT
        firstName, lastName, extension, email, jobtitle
    FROM
        employees;
-- 查詢視圖數據
SELECT * FROM v_contacts;

執行上面查詢語句後,可以看到添加一列數據 -

+-----------+-----------+-----------+--------------------------------+----------------------+
| firstName | lastName  | extension | email                          | jobtitle             |
+-----------+-----------+-----------+--------------------------------+----------------------+
| Diane     | Murphy    | x5800     | dmurphy@xuhuhu.com             | President            |
| Mary      | Hill      | x4611     | mary.hill@xuhuhu.com           | VP Sales             |
| Jeff      | Firrelli  | x9273     | jfirrelli@xuhuhu.com           | VP Marketing         |
...................  此處省略了一大波數據 ....................................................
| Yoshimi   | Kato      | x102      | ykato@gmail.com                | Sales Rep            |
| Martin    | Gerard    | x2312     | mgerard@gmail.com              | Sales Rep            |
| Lily      | Bush      | x9111     | lilybush@yiiibai.com           | IT Manager           |
| John      | Minsu     | x9112     | johnminsu@classicmodelcars.com | SVP Marketing        |
+-----------+-----------+-----------+--------------------------------+----------------------+
25 rows in set

刪除視圖

創建視圖後,可以使用DROP VIEW語句將其刪除。下麵說明了DROP VIEW語句的語法:

DROP VIEW [IF EXISTS] [database_name].[view_name]

IF EXISTS是語句的可選子句,它允許您檢查視圖是否存在。它可以避免刪除不存在的視圖的錯誤。

例如,如果要刪除organization視圖,可以按如下所示使用DROP VIEW語句:

DROP VIEW IF EXISTS organization;

每次修改或刪除視圖時,MySQL會將視圖定義檔備份到/database_name/arc/目錄中。 如果您意外修改或刪除視圖,可以從/database_name/arc/檔夾獲取其備份。

在本教學中,您已經學會了如何管理MySQL中的視圖,包括顯示,修改和刪除視圖。


上一篇: MySQL視圖 下一篇: MySQL觸發器