MySQL 视图
一、实验介绍
1.1 实验内容
本节实验将学习并实践 MySQL 视图的创建、删除和使用。
1.2 实验知识点
- 视图
- 视图处理算法
- 可更新和插入的视图
1.3 实验环境
课程使用的实验环境为 Ubuntu Linux 14.04 64 位版本。实验中会用到程序:
- Mysql 5.5.50
- Xfce终端
二、实验步骤
2.1 创建修改及删除
2.1.1 创建视图
CREATE VIEW
语法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句能创建新的视图,如果给定了OR REPLACE
子句,该语句还能替换已有的视图。select_statement
是一种SELECT
语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。
CREATE VIEW
语句要求具有针对视图的CREATE VIEW
权限,以及针对由SELECT
语句选择的每一列上的某些权限。对于在SELECT
语句中其他地方使用的列,必须具有SELECT
权限。如果还有OR REPLACE
子句,必须在视图上具有DROP
权限。
视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name
。
下面的例子中就是创建一个视图v
,该视图包含从另一个表t
中选择两列并用一个表达式计算这两列的数据:
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50), (5, 60);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
视图定义服从下述限制:
-
SELECT
语句不能包含FROM
子句中的子查询。 -
SELECT
语句不能引用系统或用户变量。 -
SELECT
语句不能引用预处理语句参数。 -
在存储子程序内,定义不能引用子程序参数或局部变量。
-
在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用
CHECK TABLE
语句。 -
在定义中不能引用
TEMPORARY
表,不能创建TEMPORARY
视图。 -
在视图定义中命名的表必须已存在。
-
不能将触发程序与视图关联在一起。
在视图定义中允许使用ORDER BY
,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY
的语句,它将被忽略。