此文是记录数据库平常的学习遇见的一些知识点
视图WITH CHECK OPTION子句
- 引用mysql官方文档的一句话:可以为可更新视图指定 WITH CHECK OPTION 子句,
以防止插入 select_statement 中 WHERE 子句不为真的行。它还会阻止更新 WHERE 子句为true的行,
但更新会导致它不为true(换句话说,它会阻止可见行更新为不可见的行)。
在可更新视图的 WITH CHECK OPTION 子句中,LOCAL 和 CASCADED 关键字在根据另一个视图定义视图时确定检查测试的范围。
如果没有给出关键字,则默认为 CASCADED 。
建立测试表和两个视图
这就可以明白有with check option的视图和没有with check option的视图之间的区别
- 没有with语句的视图,可以插入符合数据库语法约束的数据,可是不会在视图里显示出来
- 有with语句的视图,它会阻止可见行更新为不可见的行,
通俗讲就是插入的数据必须符合视图的约束,并且可以在视图里显示出来。否则它会阻止操作!!!
- 1.对于update,有with check option,要保证update后,数据要被视图查询出来
- 2.对于delete,有无with check option都一样
- 3.对于insert,有with check option,和update相同 要保证insert后,数据要被视图查询出来
- 4.对于没有where 子句的视图,也就没有视图自己的约束,因此使用with check option是多余的