视图(view)是一张虚拟表:
① 表示一张表的部分数据或多个表的综合数据,
② 其结构和数据是建立在对表的查询基础上
视图本身不存放任何数据,在使用SQL语句访问视图的时候,它返回的数据是MySQL从其他表中生成的。
为了满足不同人的关注需求,保证数据信息的安全性,可以创建多个视图。
创建视图
# view_name 为视图名字
# 在创建视图前,如果在数据库已存在同名视图,需要先删除再创建
# 删除视图
drop view if exists view_name;
#创建视图
create view view_name
as <select 语句>;
如何创建视图,可参考下面的小例(举例是单表视图,其实还有多表视图)
比如想要创建班级是2班的学生信息视图
学生表
# 创建2班的学生信息视图 CREATE VIEW view_stu as select * FROM student WHERE gradeId=2;
如何看视图是否创建成功,如图
# 去学生表所在数据库 (其还要看你在创建时所use选择的数据库) 中的视图看是否有你所创建的视图名
使用SQL语句查看视图
select 字段1, 字段2, …… from view_name;
如:查看view_student视图
select * from view_stu;
修改视图
alert view 视图名字 as 新的select语句;
视图注意事项:
利用视图更新数据实际上是对数据库中的原始数据表进行更新操作(即增 删 改 查),可以通过更新视图来更新视图涉及的相关表,视图更新和相关的数据表更新都是同步的。
1、当视图数据来自多个表时不允许添加、删除数据。
创建Y2班学生的学号、姓名和班级名视图
student表grade表
# 创建Y2班学生的学号、姓名和班级名视图
CREATE VIEW view_student
as select s.studentNo,s.studentName,g.gradeName FROM student s,grade g
WHERE g.gradeID=s.gradeId AND gradeName='Y2';
# 删除视图中姓名为小苏的学生记录
drop from view_student WHERE studentName='小琪';
此时因为视图数据来自多个表,不能对数据进行删除,所以就会出现报错信息
“[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from view_student WHERE studentName='小琪'' at line 1”
2、如果视图定义中包含了group by 、union、聚合函数、以及其他一些特殊情况,就不能被更新了。更新视图的查询也可以是一个关联语句,但是有一个限制,被更新的列必须来自同一个表中。