视图
6.1 视图概述
6.1.1 视图的含义
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化可以自动地反映到视图中。
6.1.2 视图的作用
与直接从数据表中读取相比,视图有以下优点:
● 简单性
● 安全性
● 逻辑数据独立性
6.2 创建视图
6.2.1 创建视图的语法形式
创建视图使用CREATE VIEW语句,基本语法格式如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.2.2 在单表上创建视图
MySQL可以在单个数据表上创建视图。
例子
【例6.1】在t表上创建一个名为view_t的视图,代码如下:
首先创建基本表并插入数据,语句如下:
CREATE TABLE t (quantity INT, price INT);
INSERT INTO t VALUES(3, 50);
6.2.3 在多表上创建视图
MySQL中也可以在两个或者两个以上的表上创建视图,可以使用CREATE VIEW语句实现。
例子
创建视图stu_glass,语句如下:
CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,student.name ,
stu_info.glass
FROM student ,stu_info WHERE student.s_id=stu_info.s_id;
6.3 查看视图
6.3.1 DESCRIBE语句查看视图基本信息
DESCRIBE可以用来查看视图。
DESCRIBE 视图名;
例子
【例6.4】通过DESCRIBE语句查看视图view_t的定义,代码如下:
DESCRIBE view_t;
6.3.2 SHOW TABLE STATUS语句查看视图基本信息
查看视图的信息可以通过SHOW TABLE STATUS的方法。
SHOW TABLE STATUS LIKE '视图名';
例子
【例6.5】下面将通过一个例子来学习使用SHOW TABLE STATUS命令查看视图信息,代码如下:
SHOW TABLE STATUS LIKE 'view_t' \G
6.3.3 SHOW CREATE VIEW语句查看视图详细信息
使用SHOW CREATE VIEW语句可以查看视图详细定义。
SHOW CREATE VIEW 视图名;
例子
【例6.6】SHOW CREATE VIEW查看视图的详细定义,代码如下:
SHOW CREATE VIEW view_t \G
6.3.4 在views表中查看视图详细信息
在MySQL中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有的视图的详细信息。
SELECT * FROM information_schema.views;
例子
【例6.7】在views表中查看视图的详细定义,代码如下:
mysql> SELECT * FROM information_schema.views\G
6.4 修改视图
6.4.1 CREATE OR REPLACE VIEW语句修改视图
修改视图,使用CREATE OR REPLACE VIEW语句,语法如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.4.2 ALTER语句修改视图
ALTER语句是MySQL提供的另外一种修改视图的方法。
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
6.5 更新视图
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录
6.6 删除视图
当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROP VIEW语句,删除视图必须拥有DROP权限。
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
6.7 综合案例——视图应用