mysql cascaded_MySQL local和cascaded检查选项子句

本教程通过示例和清楚的说明帮助,了解WITH CHECK OPTION子句中LOCAL和CASCADED之间的差异。

在进行本教程之前,应该熟悉WITH CHECK OPTION子句。如果不是这样,可以参阅WITH CHECK OPTION子句教程来遵循确保视图的一致性。

LOCAL&CASCADED检查范围介绍

当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。因为MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。

为了确定检查的范围,MySQL提供了两个选项:LOCAL和CASCADED。如果您没有在WITH CHECK OPTION子句中显式指定关键字,则MySQL默认使用CASCADED。

MySQL与CASCADC检查选项

要了解使用CASCADED CHECK OPTION的效果,请参阅下面的例子。

首先,创建一个名为t1的表,其中只有一个名称为:c的列,它的数据类型为int。

USE testdb;

CREATE TABLE t1 (

c INT

);

接下来,基于t1表创建一个名为v1的视图,以选择值大于10的行记录。

CREATE OR REPLACE VIEW v1

AS

SELECT

c

FROM

t1

WHERE

c > 10;

因为没有指定WITH CHECK OPTION,所以以下语句即使不符合v1视图的定义也可以工作。

INSERT INTO v1(c) VALUES (5);

然后,基于v1视图创建v2视图。在v2视图中添加一个WITH CASCADED CHECK OPTION子句。

CREATE OR REPLACE VIEW v2

AS

SELECT

c

FROM

v1

WITH CASCADED CHECK OPTION;

现在,通过v2视图在t1表中插入一个值为5的行。

INSERT INTO v2(c) VALUES (5);

MySQL发出以下错误消息:

Error Code: 1369. CHECK OPTION failed 'testdb.v2'

它失败了,因为它创建一个不符合v2视图定义的新行。

之后,我们再创建一个基于v2的名为v3的新视图。

CREATE OR REPLACE VIEW v3

AS

SELECT

c

FROM

v2

WHERE

c < 20;

我们通过v3视图插入一个新行到t1表中,值为8。

INSERT INTO v3(c) VALUES (8);

MySQL发出以下错误信息:

Error Code: 1369. CHECK OPTION failed 'testdb.v3'

上面插入语句看起来符合v3视图的定义,insert语句仍然执行失败。

这是为什么呢?

因为v3视图取决于v2视图,v2视图具有WITH CASCADED CHECK OPTION。

但是,以下插入语句能正常工作。

INSERT INTO v3(c) VALUES (30);

因为v3视图没有使用WITH CHECK OPTION定义,并且该语句符合v2视图的定义。

所以,总而言之:

当视图使用WITH CASCADED CHECK OPTION时,MySQL会循环检查视图的规则以及底层视图的规则。

0cadd1c7c44781c5c332dcfe8f770177.png

MySQL WITH LOCAL CHECK OPTION

下面将演示使用 WITH LOCAL CHECK OPTION 选项,使用上面相同的示例来查看差异。

首先,将v2视图更改为使用WITH LOCAL CHECK OPTIONS替代。

ALTER VIEW v2 AS

SELECT

c

FROM

v1

WITH LOCAL CHECK OPTION;

其次,插入与上述示例相同的行。

INSERT INTO v2(c) VALUES (5);

它是可以成功执行的。

因为v2视图没有任何规则。 v2视图取决于v1视图。 但是,v1视图没有指定检查选项,因此MySQL跳过检查v1视图中的规则。

请注意,在使用WITH CASCADED CHECK OPTION创建的v2视图中,此语句失败。

第三,通过v3视图将相同的行插入t1表。

INSERT INTO v3(c) VALUES (8);

在这种情况下可以执行成功,因为MySQL视图中的WITH LOCAL CHECK OPTIONS选项没有检查v1视图的规则。

另外,请注意,在使用WITH CASCADED CHECK OPTION创建的v2视图示例中,此语句执行失败。

0ed202318aa13b1881e852cf68cb0600.png

因此,如果视图使用WITH LOCAL CHECK OPTION,MySQL会检查WITH LOCAL CHECK OPTION和WITH CASCADED CHECK OPTION选项的视图规则。

与使用WITH CASCADED CHECK OPTION的视图不同,MySQL检查所有依赖视图的规则。

请注意,在MySQL 5.7.6之前,如果您使用带有WITH LOCAL CHECK OPTION的视图,MySQL只会检查当前视图的规则,并且不会检查底层视图的规则。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在MySQL中,级联(cascaded)是指在进行数据操作时,对于外键关联的表,如果主表的数据发生了变化,那么从表的数据也会相应地发生变化。级联操作可以通过设置外键约束来实现。引用\[2\]:在插入数据时,如果满足级联操作的条件,MySQL会自动更新相关的从表数据。引用\[3\]:如果不满足级联操作的条件,MySQL不会自动更新从表数据。 问题: MySQL级联操作是什么意思? 回答: 在MySQL中,级联操作是指在进行数据操作时,对于外键关联的表,如果主表的数据发生了变化,那么从表的数据也会相应地发生变化。级联操作可以通过设置外键约束来实现。当满足级联操作的条件时,MySQL会自动更新相关的从表数据;如果不满足级联操作的条件,MySQL不会自动更新从表数据。 #### 引用[.reference_title] - *1* [Mysql后端开发(索引、优化、事务、引擎、锁)](https://blog.csdn.net/u014685437/article/details/129927180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Mysql视图中检查选项CASCADED与LOCAL的区别](https://blog.csdn.net/oYinHeZhiGuang/article/details/124707332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值