目录
作用
1.简单。
2.安全。
3.数据独立
介绍
创建视图
查询视图:
修改视图 :
删除视图:
视图的检查选项:
方式一:with cascaded check option
例一:没有with cascaded check option
例二:有with cascaded check option
例三:基于另一个视图建立视图
方式二:with local check option
视图的更新:
视图不仅可以简化用户对数据的理解,也可以简化他们操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次指定全部条件。(封装多表联查)
数据库可以授权,但不能授权到特定行和特定的列上。通过视图用户只能查看和修改他们所能见到的数据
视图可以帮助用户屏蔽真实表结构变化带来的影响
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要工作就落在创建这条SQL查询语句上。
as:视图数据来自后面的查询语句。
create or replace view 视图名 as select语句 [ with [ cascaded | local ] check option];
这里有个表,我举个例子
根据这个表创建一个视图 ,创建时or replace可以不加。
CREATE or REPLACE VIEW view_1 AS select book_id, book_name from tbl_book;
创建成功后,会有一个新的视图出现
视图是一张虚拟的表,也可以操作,也可以加where条件
select * from 视图名
方式一:修改的replace必须存在,意思就是替换,
create or replace view 视图名 as select 语句 [ with [ cascaded | local ] check option];
举例:
查询表时多查询一个字段price
CREATE or REPLACE VIEW view_1 AS select book_id, book_name ,book_price from tbl_book;
修改之后的视图,多了一列price
方式二:
alter view 视图名 as select 语句 [ with [ cascaded | local ] check option];;
举例:
查询两列数据
alter view view_1 as select book_id, book_name from tbl_book;
修改后的视图,从三列修改为两列
drop view [if exists] 视图名;
举例:
将 view_1视图删掉,if exists就是一句判断,是否存在,可以不写
drop view if exists view_1;
create or replace view 视图名 as select 语句 [ with [ cascaded | local ] check option];
当使用with check option 子句创建视图的时候,MYSQL会通过视图检查正在更改的每一行,以使其符合视图的定义。MYSQL允许基于另一个视图创建视图,他还会检查依赖视图中的规则以保证一致性。为了确定检查范围,mysql提供了两个选项:cascaded和local,默认为cascaded。
cascaded:如果一个视图的检查条件是cascaded修饰的,那么他基于的视图在更改数据都会默认添加with cascaded check option检查选项,进行检查
举例:
原始表
先创建没有with cascaded check option的视图,条件book_id<5,
插入一个book_id=25的数据,可以成功插入,因为没有with cascaded check option,所以不会检查。
我在创建v2时使用了with cascaded check option,条件是book_id<15
CREATE OR REPLACE VIEW view_2 AS SELECT book_id , book_name from tbl_book where book_id<15 WITH CASCADED CHECK OPTION;
此时当我插入一个id=30的数据时,数据库会检查id是否满足条件, 大于条件,无法插入
把id改为<15的,就成功插入了。
1.基于另一个视图创建的视图有 with cascaded check option条件,更改时则会进行检查
我基于v1创建一个v3视图,条件给到id>0
此时v1虽然没有 with cascaded check option条件,但是v3基于v1创建的,所以也会给v1默认加上检查条件,v3视图的数据就是v1和v3条件的交集,0
2.如果基于另一个视图创建的视图没有 with cascaded check option条件,更改时则不会进行检查。
基于 v3 创建的 v4 视图没有检查条件,就会按照 v3 和 v1 的检查条件,更改数据时也是如此
local:谁定义才会检查谁,如果基类视图没有检查选项,也不会检查,只有定了才会检查
举例:
创建基于v1的v2视图,v2检查选项为with local check option
当插入数据时,只会检查v2的条件,不会检查v1的条件,而cascaded是会检查基于视图的条件的
要使视图可更新,视图中的行与基本表中的行之间必须存在一对一的关系,如果视图包含以下任意一项,则该视图不可更新。
1.聚合函数或窗口函数(SUM(),MIN(),MAX(),COUNT())
2distinct
3.group by
4.having
5.union或union all
举例:
我们创建一个带聚合函数的视图
然后进行插入操作,发现无法插入数据,因为视图的行与基本表中的行不是一对一关系