MySQL学习入门教程:WITH CHECK OPTION子句中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
);
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