不是很明白SQL中创建视图时,with check option 的用法拜托各位大神

希望能有一个例子。一般会应用到什么情况... 希望能有一个例子。一般会应用到什么情况 展开
 我来答
没落帝国dcy
2017-12-20
知道答主
回答量:27
采纳率:0%
帮助的人:14.9万
展开全部

《PHP与mysql程序设计第四版》 498页视图章节

文档地址 网页链接也做了详细描述

摘抄自文档

The WITH CHECK OPTION clause can be given for an updatable view to prevent inserts to rows for which the WHERE clause in the select_statement is not true. It also prevents updates to rows for which the WHERE clause is true but the update would cause it to be not true (in other words, it prevents visible rows from being updated to nonvisible rows).

WITH CHECK OPTION 语句可以防止插入 可更新view 时候不满足view 的条件(比如我创建view 筛选的table_name 中age > 5的数据,如果 我插入数据age小于等于5自然不行) ,他也可以用来防止 更新数据时本来是满足条件的要更新成不满足条件的情况(比如我创建view 的时候筛选条件是age > 5 现在我要把其中一条本来是age >5 的数据更新成age =4 即小于5 就不ok 了 )    换句话说就是 防止本来可见的 变成不可见

In a WITH CHECK OPTION clause for an updatable view, the LOCAL and CASCADED keywords determine the scope of check testing when the view is defined in terms of another view. When neither keyword is given, the default is CASCADED. The LOCAL keyword restricts the CHECK OPTION only to the view being defined. CASCADED causes the checks for underlying views to be evaluated as well.

LOCAL 和 CASCADED 关键字主要用在一个view 来源于另外一个view的情况 ,默认CASCADED ,LOCAL 只的是只关心本view 创建时的条件 (比如view_a 包含的子句中内容 是 select * from view_b where age > 5 那么我插入到view_a 中的时候 只关心 age>5 就可以了)    

如果 是CASCADED 表示还要关心 view_b 的条件( 比如

view_b 的条件是 select * from table_name where `salary` > 3000  那么上面 在view_a创建数据的时候 age = 10 但是 salary 是2000 就无法插入)

下面是一个文档里面的例子 就不翻译了

Consider the definitions for the following table and set of views:

```

CREATE TABLE t1 (a INT);

CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2

WITH CHECK OPTION;

CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0

WITH LOCAL CHECK OPTION;

CREATE VIEW v3 AS SELECT * FROM v1 WHERE a > 0

WITH CASCADED CHECK OPTION;

```

Here the v2 and v3 views are defined in terms of another view, v1. v2 has a LOCAL check option, so inserts are tested only against the v2 check. v3 has a CASCADED check option, so inserts are tested not only against its own check, but against those of underlying views. The following statements illustrate these differences:

```

mysql> INSERT INTO v2 VALUES (2);

Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO v3 VALUES (2);

ERROR 1369 (HY000): CHECK OPTION failed 'test.v3'

```

这个编辑器不支持MD 所以只能这样了 

谨杰NU80
推荐于2017-11-26 · TA获得超过198个赞
知道答主
回答量:101
采纳率:0%
帮助的人:87.2万
展开全部
对视图进行update或者insert操作时,保证更新或者插入的行满足图中定义的谓词条件 假如一张表里有个字段是专业的;你创建视图的时候 create view stu as select 学生 from table where 专业='计算机' with check option 这样where后面就实现了对专业的限定 以后你如果对视图添加记录的时候专业如果不是计算机的话不让添加进去的

满意请采纳
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式