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

2023年 7月 12日 42.8k 0

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

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

LOCAL&CASCADED检查范围介绍

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

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

MySQL与CASCADC检查选项

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

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

USE testdb;
CREATE TABLE t1 (
    c INT
);

SQL

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

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

SQL

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

INSERT INTO v1(c) VALUES (5);

SQL

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

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

SQL

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

INSERT INTO v2(c) VALUES (5);

SQL

MySQL发出以下错误消息:

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

SQL

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

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

CREATE OR REPLACE VIEW v3
AS
SELECT
c
FROM
v2
WHERE
c

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论