文章目录
- 一、视图概述
- 1.1 视图的优点
- 1.2 视图的缺点
- 二、创建视图
- 2.1 语法介绍
- 2.2 实践
- 三、查看视图
- 四、修改视图
- 五、删除视图
- 六、操作视图中的数据
一、视图概述
视图是从数据库中的一张或多张表中导出的表
。创建视图时所引用的表称为基表
。视图中的数据并不是像表中那样存储在数据库中,它只是读取基表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除等操作。在对视图
中的数据进行修改时,相应的基本表
中的数据也会发生变化;同时,若基本表
的数据发生变化,则这种变化也会反映到视图
中。
1.1 视图的优点
- 简化数据操作
- 安全性,可以通过视图限制对数据的插入,修改和删除等操作
- 逻辑数据独立性
1.2 视图的缺点
- 性能差
对视图查询最终转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,也要把它变成一个复杂的结合体,需要花费一定的时间。 - 修改限制
当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。
二、创建视图
2.1 语法介绍
视图可以以一张表为基础创建,也可以以多张表为基础创建。创建视图使用CREATE VIEW语句,其基本语法格式如下:
CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS SELECT_statement;
[WITH CHECK OPTION]
创建视图时应该注意以下几点:
- 定义中引用的任何表或视图都必须存在。如果在创建视图后,删除定义时引用的表或视图,则使用视图时将导致错误。
- SELECT语句中最大列名长度为64个字符。
- WITH CHECK OPTION:可选,用于视图数据操作时的检查条件。
若省略此子句,则不进行检查。
2.2 实践
在MySQL中,可以在单个数据表上创建视图,这也是最简单的一种创建方法。
实践一:
1.在student表上创建一个视图v_stu1,输出学号,姓名
create view v_stu1
as select studentid,studentname
from student;
# 查询所有学生的学号和姓名
select *
from v_stu1;
实践二:
2.在student表上创建一个视图v_Cs010901,输出Cs010901班同学的学号,姓名和性别,班级,并将视图字段重命名为sid,sname,ssex,claid
create view v_Cs010901(sid,sname,ssex,claid)
as select studentid,studentname,sex,classid
from student
where classid = 'Cs010901'
# with check option 条件的使用,是根据前提条件的where后面的条件限制,来实现删除的功能
select *
from v_Cs010901;
show tables; # 视图和数据表是有相同等级的
select sid,claid from v_Cs010901;
实践三:
3.创建一个视图v_sc1,输出学号,学生名,性别,班级号,班级名,并将视图字段重命名为sid,sname,ssex,claid,claname
使用class表中的calssid
create view v_sc1(sid,sname,ssex,claid,claname)
as select studentid,studentname,sex,class.classid,class.classname
from student,class
where student.classid = class.ClassID
使用student中的classid
create view v_sc2(sid,sname,ssex,claid,claname)
as select studentid,studentname,sex,student.classid,class.classname
from student,class
where student.classid = class.ClassID
# 以上两种方式使用的classid是截然不同的,
# 在后面的时间操作中,在class表下的生成的视图表中,
# 是无法修改其中的数据的,所以推荐使用第二种方式,
# 使用同一个表中的数据字段。
desc v_sc1;
# 视图上没有主键外键和其他约束条件
show create view v_sc2;
显示视图v_sc1表的内容
select * from v_sc1;
删除视图v_sc1表的
drop view v_sc1;
drop view v_sc2;
三、查看视图
使用DESC语句可以查看视图的结构,其基本语法格式如下:
DESC 视图名
使用SHOW CREATE VIEW语句可以查看视图定义语句,其基本语法格式如下:
show create view 视图名
四、修改视图
当基本表的某些字段发生改变时,可以通过修改视图来保持与基本表的一致性。MySQL提供CREATE OR REPLACE VIEW和ALTER语句来修改视图。
使用CREATE OR REPLACE VIEW
语句修改视图的语法形式如下:
CREATE OR REPLACE VIEW view_name [(column_list)] AS SELECT_statement;
使用ALTER VIEW
语句修改视图的语法形式如下:
ALTER VIEW view_name [(column_list)] AS SELECT_statement;
五、删除视图
使用DROP VIEW
语句可删除一个或多个视图。其基本语法格式如下:
DROP VIEW [IF EXISTS] 视图1,……视图n;
六、操作视图中的数据
由于视图是一张虚拟表
,所以对视图
中的数据进行操作,实际上就是对基表
进行操作。
Tips:当视图中的数据被修改,基表中的数据会同时被修改。同样,当基表中的数据被修改,视图中的数据也会被修改。