Code前端首页关于Code前端联系我们

MySQL入门指南:WITH CHECK OPTION 子句中 LOCAL 和 CASCADED 的区别

terry 2年前 (2023-09-26) 阅读数 44 #数据库

借助示例和清晰的解释,了解 WITH CHECK OPTION子句 ‶♶♶♶♶♻‶♻8CASCADED之间的区别。

在继续本教程之前,您应该熟悉短语WITH CHECK OPTION。如果不是这种情况,您可以按照WITH CHECK OPTION 子句教程来确保一致性。

LOCAL & CASCADED Check 范围介绍

使用WITH CHECK OPTION 创建视图时,MySQL 会检查每一行发生更改的情况,例如插入、更新、删除,使其满足视图的定义。因为MySQL允许基于不同视图创建方法,所以它也会根据一致性来验证视图的规则。

为了指定身份验证范围,MySQL 提供了两个选项:LOCALCASCADED。如果在WITH CHECK OPTION子句中未指定关键字,MySQL将CASCADED

带有 CASCADC CHECK OPTION 的 MySQL

要查看使用 CASCADED CHECK OPTION 的效果,请参阅下面的示例。

首先创建一个名为t1的表,该表只有一列,名为:c,数据类型为‶int。

USE testdb;
CREATE TABLE t1 (
    c INT
);
SQL

接下来,根据t1记录表创建一个名为v1的视图,用于选择值。

CREATE OR REPLACE VIEW v1 
AS
    SELECT 
        c
    FROM
        t1
    WHERE
        c > 10;
SQL

由于WITH CHECK OPTION未定义,因此即使♻与定义不匹配,以下语句也可能有效。

INSERT INTO v1(c) VALUES (5);
SQL

接下来,基于 v1 视图创建 v2。添加句子TO CASCADED CHECK OPTION以查看v2

CREATE OR REPLACE VIEW v2 
AS
    SELECT 
        c
    FROM
        v1 
WITH CASCADED CHECK OPTION;
SQL

现在,使用 v2v2

INSERT INTO v2(c) VALUES (5);
SQL 将包含值 5 的行插入到 t1 表中

MySQL 发出以下错误消息:

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

此操作失败,因为它创建了与定义不匹配的新行在

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

CREATE OR REPLACE VIEW v3 
AS
    SELECT 
        c
    FROM
        v2
    WHERE
        c < 20;
SQL

使用 v3 将新行及其值插入到 t1 表中。 ?

这是为什么?

自视图 v3 取决于视图 v2v2 具有 v2 CASCADED 检查选项

不过,下面的介绍还是可以的。

INSERT INTO v3(c) VALUES (30);
SQL

因为 v3 不是由 WITH CHECK OPTION›s 定义的,而 2 请参阅定义。

所以,总而言之:

当使用与CASCADED CHECK OPTION时,MySQL会绕过视图规则和基本视图规则。

MySQL学习入门教程:WITH CHECK OPTION子句中LOCAL和CASCADED的差异

带有本地检查选项的MySQL

使用带有本地检查选项显示日期,使用上面的示例来查看差异。

首先,更改视图v2以使用带本地检查选项

ALTER VIEW v2 AS
    SELECT 
        c
    FROM
        v1 
WITH LOCAL CHECK OPTION;
SQL

接下来,输入与上例相同的数字。

INSERT INTO v2(c) VALUES (5);
SQL

可以正确执行。

因为观看没有规则v2。视图 v2 取决于视图 v1。但是,v1 没有指定验证选项,因此 MySQL 会跳过 v1 视图中的规则验证。

请注意,此语句对于使用 WITH PUTTIN CHECK OPTION 创建的视图 v2 失败。

第三个,输入相同编号的表t1v3

INSERT INTO v3(c) VALUES (8);
SQL

在这种情况下可以成功执行,因为MySQL视图中的选项WITH LOCAL CHECK OPTIONS没有检查♻’v的规则。
另外,请注意,在使用 WITH CASCADED CHECK OPTION 创建的 v2 示例中,此语句失败。

MySQL学习入门教程:WITH CHECK OPTION子句中LOCAL和CASCADED的差异

因此,如果视图使用 WITH LOCAL CHECK OPTION,MySQL 将检查 WITH LOCAL CHECK OPTION 和 ❀ OPTION WICK 请参阅选项规则。

与使用MARA 和 CASCADED CHECK OPTION 的视图相反,MySQL 根据视图检查所有规则。

请注意,在MySQL 5.7.6之前,如果您使用带有WITH LOCAL CHECK OPTION❀的视图,它仅检查当前规则,而不是MySQL OPTION❀❀仅被视为一个基本论点。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门