ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL 视图——检查选项(cascaded、local)

2022-02-07 10:57:59  阅读:286  来源: 互联网

标签:选项 检查 cascaded 插入 v1 视图 MySQL id


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

一、cascaded

#case1
#创建一个基于students表的视图
create or replace view v1 as select id,name from students where id<=20;
#由于没有检查选项,所以插入id>20的数据也会插入成功
insert into v1 values(21,'john');#插入成功

#case2
#创建一个基于v1的视图,并添加cascaded检查选项
create or replace view v2 as select id,name from v1 where id>10 with cascaded check option;

#添加检查选项后,再插入数据,MySQL就会判断插入数据是否满足条件,
#由于此视图是基于v1的,所以现在可以插入的id值为 10<id<=20。
insert into v2 values(22,'lucy');#插入失败

#case3
#创建一个基于v2的视图
create or replace v3 as select id,name from v2 where id<=15;

#由于v3没有添加检查选项,但v3是基于v2的,所以现在可以插入的id值依然为 10<id<=20。
insert into v3 values(18,'Tom');#插入成功

insert into v3 values(24,'kobe');#插入失败

当我们操作当前视图时,cascaded检查选项是,如果当前视图有检查选项,则插入数据要满足包括当前视图条件以及满足当前视图所依赖的视图的条件。如果当前视图没有检查选项,则插入数据要满足当时视图所依赖视图有检查选项及其依赖的视图的条件。

二、local

#case1
#创建一个基于students表的视图
create or replace view v1 as select id,name from students where id<=20;

insert into v1 values(21,'john');#插入成功

#case2
#创建一个基于v1的视图,并添加local检查选项
create or replace view v2 as select id,name from v1 where id>10 with local check option;

#添加检查选项后,再插入数据,MySQL就会判断插入数据是否满足条件,
#由于此视图是基于v1的,v1没有检查选项,所以现在可以插入的id值为 id>10。
insert into v2 values(22,'lucy');#插入成功

#case3
#创建一个基于v2的视图
create or replace v3 as select id,name from v2 where id<=15;

#由于v3没有添加检查选项,但v3是基于v2的,所以现在可以插入的id值依然为 id>10。
insert into v3 values(18,'Tom');#插入成功

当我们在操作当前视图时,local检查选项是递归的查找当前视图所依赖的视图是否有检查选项,如果有,则检查;如果没有,就不做检查。

标签:选项,检查,cascaded,插入,v1,视图,MySQL,id
来源: https://blog.csdn.net/weixin_44300779/article/details/122805156

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有