数据库——视图
创建视图(基于SELECT语句和已经存在的数据表):
CREATE [or replace] [algorithm = {undefined | merge | temptable}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL ] CHECK OPTION]
# 在单表上创建视图
例:在student表上创建视图view_stu
create view view_stu as select math,chinese,math+chinese from student;
== create view view_stu(math,chinese,sum) as select math,chinese,math+chinese from student; (其中 sum = math+chinese)
#在多表上创建视图
例:在student 表和stu_info 表上创建 stu_class 视图,查询出s_id 号、姓名和班级
create view stu_class(id,name,glass)
as
select student.s_id,student.name,stu_info.class
from student,stu_info
where student.s_id=stu_info.s_id;
查看视图(查看数据):
1、使用describe语句(该语句可以查看视图的字段信息,其中包括字段名、字段类型等信息)
describe 视图名;
2、使用show table status语句(该语句可以查看视图的基本信息)
show table status like '视图名' (可以加 \G 是结果看起来更清晰)
注:表的说明(comment)项的值为view,说明所查的表是一个视图,存储引擎、数据长度等信息都显示为null,说明视图时虚拟表
如果comment项没有信息,说明这个表不是视图,这是视图和普通表之间最直接的区别、
3、使用show create view语句(该语句不仅可以查看创建视图时的定义语句,还可以查看视图的字符编码)
show create view 视图名;
修改视图(修改视图中存在的定义)
1、使用 create or replace view 语句(如果修改的视图存在,那么将使用修改语句对视图进行修改,如果视图存在,那么将创建一个视图)
create [or replace] [algorithe = {undefiend | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with[cascaded | local] check option]
例:修改view_stu视图
create or replace view as select * from student;
这样view_stu 视图修改后的字段信息和student 表中的字段信息完全一样了
2、使用 alter 语句
alter [algorithe = {undefiend | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with[cascaded | local] check option]
例:修改view_stu表
alter view view_stu as select student from student;
(view_stu 代表要修改的视图名,student表示student表中的chinese字段,student表示基本表表名)
更新视图
1、使用update语句(对视图中原有的数据进行更新)
例:更新view_stu 视图中chinese字段对应的数据值,将字段值改为100
update view_stu set chinese = 100;
2、使用insert语句(可以向表中插入一条数据)
例:向student表中插入一条数据,其中s_id 字段的值为4,name字段的值为"Lily",math字段的值为100,chinese字段的值为100
insert into student values(4,'Lily',100,100);
注:当基本表中的数据发生变化之后,与基本表对应的视图数据也会一同改变。
3、使用delete语句(可以删除视图中的部分记录)
例:在view_stu2视图中删除一条记录
delete from view_stu2 where math = 70;
注:当视图中包含如下内容时,视图的更新操作将不会被执行
1、视图中包含基本表中被定义为非空的列
2、在定义视图的select语句后的字段列表中使用了数学表达式
3、在定义视图的select语句后的字段列表中使用了聚合函数
4、在定义了视图select语句中使用了distinct,union,top,group by 或 having 子句
删除视图(只能删除视图的定义,不会删除数据,必须拥有drop权限)
drop view [if exists] view_name [,view_name]···[restrict | cascade]
例:删除view_stu2视图
drop view if exists view_stu2;

浙公网安备 33010602011771号