视图是一个虚拟表,其内容由select查询语句定义。和真实的表一样,视图也包含行和列,对视图的操作与对表的操作基本一致。视图中的数据是在使用视图时动态生成的,视图中的数据都存储在基表中。
视图是对复杂查询语句的封装,简化了复杂的查询,使复杂的查询更易于理解和使用,可以隐藏一些敏感的信息,将权限限定到行列级别。基表的数据变化会影响视图表,视图表的数据变化也会影响到基表,这个是有条件限制,视图要与原表完全一样,这样对视图进行增删改操作其实意义不大。
#创建视图
create view view_name as select...;
#修改视图
alter view view_name as select...;
#查看视图创建语句
show create view view_name;
#查看所有视图
show table status where comment='view';
#删除视图
drop view view_name;
实例
create view student_view as select * from student;
show tables; #发现student_view也在tables里面
show table status where comment = 'view'; #可以知道哪些是视图
#对视图进行修改
update student_view set name='李四2' where stu_no='20150903';
#查看视图以及原表,发现都发生了变化
select * from student_view;
select * from student;
#对原表进行修改,效果一样
update student set name='李四' where stu_no='20150903';
select * from student_view;
select * from student;
当两张表有关联,比如student表和score表,创建所需要的视图
create view stu_score_view as
select A.*,B.course,B.score
from student A
left join score B on(A.stu_no = B.stu_no);
#查看效果
select * from stu_score_view;
#基于多张表构成的视图是不能进行增删改操作的
update student_view set name='李四2' where stu_no='20150903'; #会报错