视图
视图
*1. 视图的介绍:
通俗的讲。视图只保存sql 的查询逻辑,不保存数据内容,主要就是查询sql 的逻辑
*2. 视图的基本语法:
1.创建视图 : create or replace view 视图名 as select 字段名 from 查询的表 + 条件
create or replace view tb_user1 as select id,name from tb_user where id < 100;
-
查看视图:方式一 show create view + 视图名
show create view tb_user1
-- 方式二 select * from 视图名
select * from tb_user1 where id < 26; -- 条件应该是在创建时的基础上查询的条件
-
修改视图 : 两种方式
-- 方式一 create or replace view 视图名 as select 字段名 from 修改的表名 (条件) create or replace view tb_user1 as select id,name,phone from tb_user where id < 10; -- 方式二 alter view 视图名 as select 字段名 from 修改的表名 (条件) alter view tb_user1 as select id,name from tb_user where id < 5; -
删除视图: drop view + 视图名
*3. 视图的检查选项
在使用视图的检查选项时,mysql会根据视图检查正在更改的每行,例如添加 删除 插入 等,并且mysql允许基于另一个视图创建视图,
他会依赖视图中的规则以保持一致性,
1.cascaded的使用:
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图
创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。
例子:
-- 例子 cascaded使用
-- 添加
create or replace view score_1 as select id,name from score where id <66 with cascaded check option ;
select * from score_1;
insert into score_1 values (5,'小吉');
insert into score_1 values (66,'小唐');
-- 在另外一张视图上添加检查选项
create or replace view score_2 as select id,name from score_1 where id >4 with cascaded check option ;
select * from score_2;
insert into score_2 values (4,'小兴'); -- 遵循检查选项的条件 取两个视图的交集
-- 当有第三个视图 但是没有检查选项时 如果不符合这个条件但是符合别的视图的条件不会报错会被添加 但是符合第三个条件不符合有检查选项的条件不会添加会报错
2.local的使用:
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创
建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1。
*4. 视图的更新
要使视图可以更新,视图中的行和基础表中的行之间要存在一一对应的关系,以下各种情况视图不可以更新
A. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)
B. DISTINCT
C. GROUP BY
D. HAVING
E. UNION 或者 UNION ALL
*/
-- 例如
create or replace view count1 as select count(*) from score;
select * from count1;
-- 进行增删改的操作 执行错误 因为不满足基础表和视图行一一对应的关系
insert into count1 values (10);
*5. 视图的作用
视图的作用: 简单 安全 数据独立
1). 简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视
图,从而使得用户不必为以后的操作每次指定全部的条件。
2). 安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见
到的数据
3). 数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响