MySQL数据库——视图-检查选项(cascaded、local)

目录

检查选项

CASCADED

LOCAL


检查选项

当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。 MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选项: CASCADED 和 LOCAL,默认值为 CASCADED 。

CREATE VIEW xx 
AS SELECT id,name 
FROM 
XXXX WHERE id <= 20 
WITH CASCADED CHECK OPTION;

CASCADED

意为“级联”。

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。

具体来说,例如下面这条SQL语句:

create view v1 
as
select id,name 
from
student where id <= 20;

其没有添加检查选项的子句,所以运行时并不会检查id <= 20;

再看下面这条:

create view v2
as
select id,name
from
v1 where id >= 10
with cascaded check option;

它是基于v1来建立视图的,并且添加了检查选项的子句,所以它会检测v2的id >= 10 ;又由于它是基于v1而创建的视图,cascaded会与之相连,所以也会检查v1的 id <= 20。

最后看这条:

create view v3 
as
select id,name 
from
v2 where id <= 15;

v3是基于v2来建立视图的,v2又是基于v1来建立视图的;又因为v3本身没有添加检查选项的子句,所以只会检测v2和v1的条件。

LOCAL

意为 本地。

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创
建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1。

具体来说,

-- 创建v1视图
create view v1 
as
select id,name
from 
student where id <= 15;


-- 创建v2视图
create view v2
as
select id,name
from
v2 where id >= 10
with local check option;

创建v1视图没有指定检查选项,创建v2视图时(基于v1)指定了local的检查选项;那么会对v2进行条件检测,然后递归到v1;由于v1本身没有指定检查选项,所以不进行检测,这就是local的检查选项。

再来创建v3:

create view v3
as
select id,name
from v2 where id < 20;

v3本身没有指定检查选项,所以不检测;递归到v2,v2有local的检查选项,进行检测;再递归到v1,没有检查选项,不进行检测。


END


学习自:黑马程序员——MySQL数据库课程
 

你可能感兴趣的:(数据库,数据库,mysql,sql,学习,笔记)