一、概念
视图是从一个表或者多个表导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中的数据进行查询、修改和删除。
视图的优点:
- 简化查询语句
视图不仅可以简化用户对数据的理解,还可以简化对数据的操作。
日常可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。
- 安全性
通过视图用户只能查询和修改他们所能见到的数据,数据库中的其它数据既看不到也取不到。
- 逻辑数据独立性
视图可以帮助用户屏蔽真实表结构变化带来的影响。
二、视图管理
2.1、创建视图语法格式
视图的创建基于SELECT
语句和已经存在的数据表。视图可以建立在一张表上,也可以是多张表上。
CREATE [OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }]
VIEW view_table_name [column_list]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
-
CREATE
:表示创建视图的关键字。 -
OR REPLACE
:表示该语句能够替换已有视图。 -
ALGORITHM
:可选。表示视图选择的算法。-
UNDEFINED
:表示MySQL将字段选择所要使用的算法。 -
MERGE
:表示将使用视图的语句与视图定义合并起来,使视图定义的某一部分取代语句的对应部分。 -
TEMPTABLE
:将视图的结果存入临时表,然后使用临时表执行语句。
-
-
view_name
:表示要创建的视图名称。 -
column_list
:可选,表示属性清单。指定了视图中各个属性的名。默认情况下:与SELECT
语句中查询的属性相同。 -
AS
:表示指定视图要执行的操作。 -
select_statement
:是一个完整的查询语句,表示从某个表或者视图中查出某些满足条件的数据,将这些数据存入视图中。 -
WITH CHECK OPTION
:可选。表示创建视图时要保证在该视图的权限范围内。CASCADED
:可选。表示创建视图时,要满足跟该视图有关的所有相关视图和表的条件。(该参数为默认值)LOCAL
:可选。表示创建视图时,只要满足该视图本身定义的条件既可。
2.2 创建视图
使用源表列名
CREATE VIEW view_stu
AS SELECT math,chinese,math + chinese FROM student;
结果:
math | chinese | math+chinese |
---|---|---|
80 | 78 | 158 |
指定视图字段名称
CREATE VIEW view_stu2(math,chin,sum)
AS SELECT math,chinese,math + chinese FROM student;
结果:
math | chin | sum |
---|---|---|
80 | 78 | 158 |
多表创建视图
CREATE VIEW stu_class(id,name,glass)
AS
SELECT student.id, student.name, stu_info.class
FROM student, stu_info
WHERE student.id = stu_info.id;
2.3 查看视图
有三种方式查看创建的视图:
- 使用
DESCRIBE
。 - 使用
SHOW TABLE STATUS
。 - 使用
SHOW CREATE VIEW
。
1. 使用DESCRIBE
:
DESCRIBE 视图名;
DESC 视图名;
语句
DESCRIBE stu_class;
2. 使用SHOW TABLE STATUS
SHOW TABLE STATUS '视图名';
SHOW TABLE STATUS 'stu_class';
视图中多列值为null。(存储引擎,数据长度)
基本表:
视图表:
3. 使用SHOW CREATE VIEW
SHOW CREATE VIEW 视图名;
SHOW CREATE VIEW my_student;
2.4 修改视图
修改数据库中存在的视图的定义。当基本表中的某些字段发生改变时,修改视图保持视图与基本表的一致性。
- 使用
CREATE OR REPLACE VIEW
- 使用
ALTER
1. 使用CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW view_stu AS SELECT * FROM student;
- view_stu:表示要修改的视图的名称。
*
:通配符表示表中更新表中所有的字段。- student:表示基本表的表名。
2. 使用ALTER
ALTER VIEW view_stu SELECT chinese FROM student;
- view_stu:表示要修改的视图的名称。
chinese
:表示基本表中chinese,要更新的字段名。- student:表示基本表的表名。
2.5 更新视图
- 更新视图是指通过视图来更新、插入、删除基本表中的数据。
- 当更新视图或者基本表,对应的视图、基本表都会更新。除了
4. 特殊情况不更新视图
中一些不能在视图中更新内容。
1. 更新视图中字段值:
UPDATE view_stu SET chinese = 100;
结果:
- 视图中的,基本表student、与student关联的视图表,
chinese
字段都更新。
2. 使用INSERT
更新视图:
向基本表中插入数据
INSERT INTO student VALUES( 4, 'lisi', 100, 100 );
3. 使用DELECT
更新视图:
- 删除数据是通过基本表进行删除的。
DELETE FROM view_stu2 WHERE math = 70;
4. 特殊情况不更新视图
- 视图中包含基本表中定义为非空的列。
- 在定义视图的
SELECT
语句后的字段列表中使用了数学表达式。 - 在定义视图的
SELECT
语句后的字段列表中使用了聚合函数。 - 在定义视图的
SELECT
语句后的字段列表中使用了DISTINCT
、UNION
、TOP
、GROUP BY
、HAVING
语句。
2.6 删除视图
语法:
DROP VIEW[IF EXISTS]
view_naem [,view_name1]...
[RESTRICT|CASCADE]
删除视图view_stu2
DROP VIEW IF EXISTS view_stu2;