摘要:在本教程中,您将学习如何管理 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)
要显示视图的定义,请使用SHOW CREATE VIEW
语句,如下所示:
SHOW CREATE VIEW organization;
Code language: SQL (Structured Query Language) (sql)
您还可以使用任何文本编辑器打开数据库文件夹中的视图定义文件来显示视图的定义。
例如,要打开organization
视图定义,您可以找到具有以下路径的视图定义文件: \data\classicmodels\organization.frm
但是,您不应直接在 *.frm 文件中修改视图。
修改视图
MySQL 提供了两个允许您修改现有视图的语句: ALTER VIEW
和CREATE 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)
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)
以下示例将jobtitle
列添加到contacts
视图:
CREATE OR REPLACE VIEW contacts AS
SELECT
firstName,
lastName,
extension,
email,
jobtitle
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
删除视图
要删除现有视图,请使用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 VIEW
或CREATE OR REPLACE
视图来修改视图。 - 使用
DROP VIEW
语句删除视图。