网站建设有什么服务,网站维护包含哪些内容,上海房产信息网,收费网站推广视图View 1、视图的基础语法2、检查选项3、视图的更新4、视图的作用 视图#xff08;View#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在#xff0c;行和列数据来自定义视图的查询中使用的表#xff0c;并且是在使用视图时动态生成的。 通俗的讲… 视图View 1、视图的基础语法2、检查选项3、视图的更新4、视图的作用 视图View是一种虚拟存在的表。视图中的数据并不在数据库中实际存在行和列数据来自定义视图的查询中使用的表并且是在使用视图时动态生成的。 通俗的讲视图只保存了查询的 SQL 逻辑不保存查询结果。所以我们在创建视图的时候主要的工作就落在创建这条 SQL 查询语句上。
1、视图的基础语法
创建
-- 创建视图
create [or replace] view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];查询
-- 查看创建视图语句
show create view 视图名称;-- 查看视图数据
select * from 视图名称 [where ...];修改
-- 方式一和创建视图语法相同但是主要关注的是 or replace 部分因为是要修改
create or replace view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];-- 方式二
alter view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];删除
drop view [if exists] 视图名称 [, 视图名称...];2、检查选项
检查选项有两种cascaded 和 local。下面通过一个案例来分析检查选项的用处。
假设现在有一个 user 表。里面有两个字段id 和 name。存储了三条数据 id----------name 1-----------张三 2-----------李四 3-----------王五 现在给这个表创建一个视图
-- 给表 user 创建一个视图select 语句为查询 id 10 的所有数据
create view user_v as select * from user where id 10;这时操作 user_v 视图插入一条 id 为4的数据。
-- 插入一条 id 为4的数据
insert into user_v values(4, 李六);
-- 再通过查询语句查询视图 user_v 数据能够查询到所有数据
select * from user_v;
-- 通过查询语句查询表 user 的数据发现数据也成功插入到表中
select * from user;再向视图 user_v 中插入一条 id 为11的数据。
-- 向视图 user_v 插入一条 id 为11的数据
insert into user_v values(11, 王麻子);
-- 通过查询语句查询视图 user_v 数据发现查询不到 id 为11的数据。
-- 这是因为在创建视图 user_v 时select 语句指定了过滤条件 where id 10因此id 为11的数据并不会出现在视图 user_v 中
select * from user_v;
-- 但是数据还是会成功插入到 user 表中。通过查询语句可以查看到
select * from user;通过上面的案例可以发现通过向视图插入数据发现视图中没有成功插入但是原表中成功插入了。为了避免这种现象MySQL 在创建视图时提供了 cascaded 检查选项可以将创建视图的 sql 修改为
create view user_v as select * from user where id 10 with cascaded check option;在上面的案例中检查选项 cascaded 的作用是在向视图插入数据时满足创建视图条件的数据才能被成功插入而不满足条件的数据插入时会报错。在上述案例中创建的视图只允许 id 10 的数据增加了检查选项 cascaded 后再向视图插入 id 大于10的数据则会报错无法成功插入。
视图检查选项的作用 当使用 with check option 子句创建视图时MySQL 会通过视图检查正在更改的每个行例如插入、更新、删除以使其符合视图的定义。MySQL 允许基于另一个视图创建视图它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围 MySQL 提供了两个选项cascaded 和 local默认值为 cascaded。 cascaded当前视图及其依赖的视图的创建条件都要满足
-- 创建视图 user_1此视图没加检查选项那么在操作该视图时是不会去检查是否满足 id 20
create view user_1 as select * from user where id 20;
-- 基于视图 user_1 再创建一个视图 user-2
-- 给视图 user_2 增加了检查选项 cascaded。此时再要操作视图 user_2不仅要满足 user_2 的创建条件还要满足 user_1 的创建条件
create view user_2 as select * from user_1 where id 10 with cascaded check option;local需满足当前视图的创建条件同时会递归查看所依赖的视图是否有检查选项如果有检查选项也需要满足依赖的视图的创建条件如果没有检查选项则忽略。
3、视图的更新
要使视图可更新视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项则该视图不可更新
聚合函数或窗口函数sum()、min()、max()、count()等distinctgroup byhavingunion 或者 union all
4、视图的作用
简单 视图不仅可以简化用户对数据的理解也可以简化他们的操作。那些被经常使用的查询可以被定义为视图从而使得用户不必为以后得操作每次指定全部的条件。安全 数据库可以授权、但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。数据独立 视图可帮助用户屏蔽真实表结构变化带来的影响。