MySQL之视图CRUD与更新
介绍
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
创建视图:
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[ CASCADED | LOCAL] CHECK OPTION]
create or replace view stu_V_1 as select id , name from student where id < 10;
查询视图:
查看创建视图语句: SHOW CREATE VIEW 视图名称;
show create view stu_v_1;
查看视图数据: SELECT * FROM 视图名称 ......;
修改视图:
方式一: CREATE [OR REPLACE VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED | LOCAL] CHECK OPTION]
create or replace view stu_v_1 as select id , name , no from student where id < 10;
方式二: ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED | LOCAL] CHECK OPTION]
alter view stu_v_1 as select id , name from student where id < 10;
删除视图:
DROP VIEW [IF EXISTS] 视图名称[,视图名称]...
drop view if exists stu_v_1;
更新视图
视图的更新 要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新
-
聚合函数或窗口函数 (SUM()、MIN()、MAX()、COUNT()等)
-
DISTINCT
-
GROUP BY
-
HAVING
-
UNION 或者 UNION ALL
create view stu_v_count as select count(*) from student;
insert into stu_v_count values(10);
视图中的数据和表中的数据不是一一对应的,插入不成功。
作用
简单 视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
安全 数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
数据独立 视图可帮助用户屏蔽真实表结构变化带来的影响。
案例
-
为了保证数据库表的安全性,开发人员在操作tb_user表时,只能看到的用户的基本字段,屏蔽手机号和邮箱两个字段。
create view tb_user as select id , name , profession , age , gender , status , createtime from tb_user; select * from tb_user;
-
查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图
create view tb_stu_course_view as select s.name student_name , s.no student_no , c.name course_name from student s, student_course where s.student_id = sc.student_id , c.course_id = sc.course_id; select * from tb_stu_course_view;