MySQL之视图CRUD与更新

MySQL之视图CRUD与更新

介绍

视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。

通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SOL查询语句上。


增删改查

创建视图:

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;

更新视图

视图的更新
要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新

  1. 聚合函数或窗口函数 (SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL

create view stu_v_count as select count(*) from student;
insert into stu_v_count values(10);

视图中的数据和表中的数据不是一一对应的,插入不成功。

作用

简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据

数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响。


案例

  1. 为了保证数据库表的安全性,开发人员在操作tb_user表时,只能看到的用户的基本字段,屏蔽手机号和邮箱两个字段。

    create view tb_user as select id , name , profession , age , gender , status , createtime from tb_user;
    
    select * from tb_user;
    

MySQL之视图CRUD与更新_第1张图片

  1. 查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图

    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;
    

你可能感兴趣的:(mysql,数据库)