MYSQL视图的创建及检查选项

/*
MySQL中的视图(View)是一种虚拟表,它是根据查询语句的结果集创建的。
视图并不存储实际的数据,而是基于基础表(或其他视图)上的查询结果动态生成的。视图可以简化复杂的查询操作,并提供数据安全性。

在MySQL中创建视图可以使用以下语法:

CREATE VIEW 视图名 AS select语句;


例如,创建一个名为customer_view的视图,查询customers表中的name和email列:

CREATE VIEW customer_view AS
SELECT name, email
FROM customers;

创建视图后,可以像查询表一样使用视图进行查询操作:

SELECT * FROM customer_view;
视图还可以包含聚合函数、JOIN操作、子查询等复杂的查询语句。
视图的数据是根据基础表的数据实时生成的,所以当基础表的数据发生变化时,通过查询视图可以获得最新的结果。

另外,还可以使用ALTER VIEW语句修改视图的定义,使用DROP VIEW语句删除视图。

*/



-- 视图的检查选项
/*
视图在创建时可以使用检查选项来限制对其进行数据更新的操作。
检查选项有两种形式:WITH CHECK OPTION和WITH CASCADED CHECK OPTION。

1、WITH CHECK OPTION:当使用WITH CHECK OPTION创建视图时,只有满足视图定义的记录才可以被更新。
如果试图更新不符合视图定义的记录,更新操作将被拒绝。这一选项可以用于确保只更新视图所期望的数据。

例:CREATE VIEW my_view AS SELECT * FROM my_table WHERE column1 = 1 WITH CHECK OPTION;


2、WITH CASCADED CHECK OPTION:类似于WITH CHECK OPTION,但在嵌套视图中使用时,会递归地应用检查选项。
也就是说,当嵌套视图包含WITH CASCADED CHECK OPTION时,更新操作必须满足所有相关视图的检查条件。

例:
CREATE VIEW view1 AS SELECT * FROM my_table WHERE column <= 25;

CREATE VIEW view2 AS SELECT * FROM view1 WHERE column >= 10 WITH CASCADED CHECK OPTION ;

CREATE VIEW view3 AS SELECT * FROM view2 WHERE column <= 30;

解释:
view3是依赖view2 视图创建的
view2是依赖view1 视图创建的
现想向view3中插入数据column = 28 --》
创建view3时没有检查条件,故不要求column <= 30 --》 由于view3是依赖view2 视图创建的 且 view2有检查条件--》
故 要满足column >= 10 的条件--》 满足 --》 由于 view2是依赖view1 视图创建的 且view2有检查条件--》
则 也需要满足 view1 条件 column <= 25 --》 不满足 --》 添加不了 --》 报错。

总结:
WITH CASCADED CHECK OPTION 使得当前视图插入数据时需要满足其依赖的所有视图的条件。

注:如果没有使用检查选项,每个视图的条件将被独立验证,不会考虑其依赖的视图的约束条件。
这意味着,您可以向view3中插入满足view3的条件的任何记录,而不必满足其依赖的视图的条件。

3、with local check option
需要满足当前视图的条件。对于底部视图,也是先看是否有指定的with check option语句,有的话对应处理,无则不需要满足底部视图的条件

*/



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值