MySQL之视图检查选项

发布时间 2023-07-22 12:53:25作者: 镰刀战士

MySQL之视图检查选项

视图的检查选项

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

cascade

 create or replace view stu_v_1 as select id , name from student where id <= 20 ;
 select * from   stu_v_1;
 insert into stu_v_1 values(6,'Tom');
 insert into stu_v_1 values(30 , 'Tom');
 #插入成功,虽然限定条件为id<=20,但是没有检查选项。
 create or replace view stu_v_2 as select id , name from stu_v_1 where id >= 10 with cascaded check option;
 insert into stu_v_1 values(6,'Tom'); 
 #插入不成功,因为不满足stu_v_2的条件 id>=10
 insert into stu_v_1 values(30 , 'Tom'); 
 #插入成功,满足stu_v_2的条件 id>=10 , 虽然stu_v_1有条件,但是没加检查选项,不用管

local

 create or replace view stu_v_4 as select id,name from student where id <= 15;
 insert into stu_v_4 values(5,'Tom');
 insert into stu_v_4 values(16,'Tom');
 #虽然不满足条件,但是4图没加检查选项,可以插入成功。
 ​
 create or replace view stu_v_5 as select id,name from stu_v_4 where id >= 10 with local check option ;
 insert into stu_v_5 values(13,'Tom');
 insert into stu_v_5 values(17,'Tom');
 #满足当前该图的条件,虽然该图依赖4图,但是4图没加检查选项,不用管,可以插入成功。
 ​
 create or replace view stu_v_6 as select id,name from stu_v_5 where id < 20 ;
 insert into stu_v_6 values(14,'Tom');
 #满足6图依赖的5图的条件,可以插入成功