视图操作
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。
- 视图并不在数据库中以存储数据值的形式存在,行和列数据来自定义视图的查询所引用的基本表,并且在具体引用视图时动态生成。
- 视图使程序员只关心特定数据和负责的特定任务。程序员只能看到视图中定义的数据,而不是视图所引用表中的数据,从而提高数据的安全性。
创建视图
CREATE [OR REPLACE] VIEW viewname[columnlist]
AS SELECT statement;
#CREATE表示创建新的视图,REPLACE 表示替换已经创建的视图;
viewname为视图名称;columnlist为属性列;
SELECT statement表示SELECT语句
-
创建视图需要登录用户有相应的权限
use school; select user,Select_priv,Create_view_priv FROM mysql.user;#查询数据库用户创建和选择视图权限
-
在单表上创建视图
use school; alter table student add privacy varchar(64);#增加隐私列 #查询数据库用户创建和选择视图权限 create view view_student as select id,class_id,name from student; #为学生创建视图 desc view_student; #查看视图 select * from view_student; #根据视图进行查询
-
在多表上创建视图
create view view_student_class as select student.id,student.name,class.name,class.teacher from class inner join student on class.id = student.class_id;#为学生创建视图 desc view_student_class; select * from view_student_class;
查看视图
- DESCRIBE | DESC view_name
- SHOW TABLES;
- 从MySQL5.1开始,show tables 开始显示视图名字
- SHOW CREATE VIEW/TABLE view_name;
- 查看视图创建信息
更新视图数据
-
通过 INSERT、UPDATE、DELETE来实现
-
use school; alter table student add privacy varchar(64); create view view_student as select id,class_id,name from student; desc view_student; select * from view_student; update view_student set name='小花花'where name ='小花';#改名
-
不能更新的情况
-
- 视图中包含 **SUM(), COUNT(), MAX()和 MIN()**等函数
- 视图中包含UNION, UNION ALL, DISTINCE, GROUP BY 和 HAVING
- 视图对应的表存在没有默认值的列,而且该列没有包含在视图里
- 包含子查询的视图
- 其他特殊视图
-
修改视图
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图
ALTER VIEW viewname[columnlist]
AS SELECT statement
-
对于视图view_student_class,需要增加表示编号的字段id
ALTER VIEW view_student_class as select student.id, student.name, class.name, class.id as class_id,class.teacher from class inner join student on class.id= student.class_id; desc view_student_class; select * from view_student_class;
删除视图
在MySQL中,使用DROP VIEW 来删除视图,但用户必须有 DROP全权限
DROP VIEW viewname[,viewnamen];
#可以一次性删除多个
drop view view_student_class;