Managing Views in MySQL

摘要:在本教程中,您将学习如何管理 MySQL 中的视图,包括显示、修改和删除视图。

显示视图定义

SHOW CREATE VIEW语句显示视图的定义。下面显示了SHOW CREATE VIEW语句的语法:

SHOW CREATE VIEW [database_name].[view_ name];Code language: SQL (Structured Query Language) (sql)

要显示视图的定义,需要在SHOW CREATE VIEW子句后指定视图名称。

让我们创建一个演示视图

我们根据employees表创建一个视图,显示公司的组织结构:

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;Code language: SQL (Structured Query Language) (sql)
MySQL组织视图

要显示视图的定义,请使用SHOW CREATE VIEW语句,如下所示:

SHOW CREATE VIEW organization;Code language: SQL (Structured Query Language) (sql)

您还可以使用任何文本编辑器打开数据库文件夹中的视图定义文件来显示视图的定义。

例如,要打开organization视图定义,您可以找到具有以下路径的视图定义文件: \data\classicmodels\organization.frm

但是,您不应直接在 *.frm 文件中修改视图。

修改视图

MySQL 提供了两个允许您修改现有视图的语句: ALTER VIEWCREATE OR REPLACE VIEW

1)使用ALTER VIEW语句修改视图

要修改视图,请使用ALTER VIEW语句。

ALTER VIEW语句的语法与CREATE VIEW语句类似,只是CREATE关键字被ALTER关键字替换。

ALTER
 [ALGORITHM =  {MERGE | TEMPTABLE | UNDEFINED}]
  VIEW [database_name].  [view_name]
   AS 
 [SELECT  statement]Code language: SQL (Structured Query Language) (sql)

以下示例通过添加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;Code language: SQL (Structured Query Language) (sql)

要验证更改,您可以从organization视图中查询数据:

SELECT * FROM Organization;Code language: SQL (Structured Query Language) (sql)
MySQL 组织视图已更改

2)使用CREATE OR REPLACE VIEW语句修改视图

除了ALTER VIEW语句之外,您还可以使用CREATE OR REPLACE VIEW语句来创建或替换现有视图。

如果视图已经存在,MySQL 只是修改该视图。如果视图不存在,MySQL 会创建一个新视图。

以下语句使用CREATE OR REPLACE VIEW语法基于employees表创建contacts视图:

CREATE OR REPLACE VIEW contacts AS
    SELECT 
        firstName, lastName, extension, email
    FROM
        employees;Code language: SQL (Structured Query Language) (sql)
MySQL CREATE OR REPLACE 视图示例

以下示例将jobtitle列添加到contacts视图:

CREATE OR REPLACE VIEW contacts AS
    SELECT 
        firstName, 
        lastName, 
        extension, 
        email, 
        jobtitle
    FROM
        employees;Code language: SQL (Structured Query Language) (sql)
MySQL 替换视图示例

删除视图

要删除现有视图,请使用DROP VIEW语句。下面说明了DROP VIEW语句的语法:

DROP VIEW [IF EXISTS] [database_name].[view_name]Code language: SQL (Structured Query Language) (sql)

如果view_name不存在于database_name中,MySQL将发出错误。为了避免此错误,您可以添加IF EXISTS选项。

例如,以下语句使用DROP VIEW语句删除当前数据库中的organization视图:

DROP VIEW IF EXISTS organization;Code language: SQL (Structured Query Language) (sql)

每次修改或删除视图时,MySQL 都会将视图定义文件备份到/database_name/arc/文件夹。

如果您不小心修改或删除了某个视图,您可以从arc文件夹中获取其备份。

概括

  • 使用SHOW CREATE VIEW语句显示视图的定义。
  • 使用ALTER VIEWCREATE OR REPLACE视图来修改视图。
  • 使用DROP VIEW语句删除视图。
本教程有帮助吗?