在本教學中,您將學習如何管理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 VIEW
和CREATE 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中的視圖,包括顯示,修改和刪除視圖。