【MySQL】WITH CHECK OPTION的用法

系列文章

C#底层库–MySQL脚本自动构建类(insert、update语句生成)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216

C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

C#底层库–SQLiteHelper访问操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123666958

【提升编程效率】Excel数据批量导入工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【Oracle】数据库服务器限制ip访问
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122220930

【Oracle】Excel导入数据教程
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118722756

【Oracle】数据库还原教程_数据泵
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118054855

【SQL】如何查询表字段并识别主键
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110820405

SQL outer apply的用法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/79903489

MySQL安装教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520

MySQL卸载教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265

MySQL分类汇总(group by…with rollup),如何显示“总计”字段?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128217837

MySQL WITH CHECK OPTION的用法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128147196

MySQL 使用存储过程插入千万级数据如何提升效率?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/77728189

MySQL 数据库表行列转置的实现
本文链接:https://blog.csdn.net/youcheng_ge/article/details/77625052


前言

本专栏为【数据库】,主要介绍SQL的功能与特点、SQL数据定义语言(表、视图、索引、约束)、SQL数据操作语言(数据检索、数据插入、数据删除、数据更新)、创建与删除触发器、SQL数据控制语言(安全性和授权、事务处理)以及嵌入式SQL。
如果你对本专辑感兴趣,持续关注吧。大家有任何问题,也可以评论区反馈,私信我。
在这里插入图片描述

一、技术介绍

视图的定义:

视图不是真实存在的基本表,而是一个虚拟表

视图的作用:

1、可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求
2、使用视图可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中。
3、视图可以使用户只关心他感兴趣的某些特定数据和所负责的特定任务,而那些不需要的或者无用的数据则不再视图中显示。
4、视图大大地简化了用户对数据的操作
5、视图可以让不同的用户以不同的方式看到不同或者相同的数据集。
6、在某些情况下,由于表中数据量太大,因此在表的设计时常对表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。
7、视图提供了一个简单而有效的安全机制

视图的创建:

CREATE VIEW 视图名(列表名)
AS SELECT 查询子句
[WITH CHECK OPTION]

二、测试用例

2.1 数据准备

创建用户信息表userinfo

CREATE TABLE userinfo(
sno CHAR(10) NOT NULL UNIQUE,
sname CHAR(40) UNIQUE,
city CHAR(20),
PRIMARY KEY (sno) 
);

创建用户信息视图V_userinfo,条件:“城市”只取“镇江”的数据。

CREATE VIEW V_userinfo
AS 
SELECT * FROM userinfo
WHERE city='zhengjiang'

向视图中插入数据,本质也是往表中插入数据

INSERT INTO V_userinfo VALUES('00001','成成','zhengjiang');
INSERT INTO V_userinfo VALUES('00002','欣欣','zhengjiang');
INSERT INTO V_userinfo VALUES('00003','刘健','nanjiang');

数据插入成功,如下图所示:
在这里插入图片描述

2.2 数据查询

查询表

SELECT * FROM userinfo

结果
在这里插入图片描述

查询视图

SELECT * FROM V_userinfo

结果
在这里插入图片描述

2.3 修改视图,加上WITH CHECK OPTION

修改视图

ALTER VIEW V_userinfo
AS 
SELECT * FROM userinfo
WHERE city='zhengjiang'
WITH CHECK OPTION

运行结果:成功

2.4 再次进行数据插入

插入00004

INSERT INTO V_userinfo VALUES('00004','婷婷','zhengjiang');

运行结果:

1 queries executed, 1 success, 0 errors, 0 warnings

查询:INSERT INTO V_userinfo VALUES('00004','婷婷','zhengjiang')1 行受到影响

执行耗时   : 0.009 sec
传送时间   : 0 sec
总耗时      : 0.009 sec

插入00005

INSERT INTO V_userinfo VALUES('00005','壮壮','nanjiang');

运行结果:

1 queries executed, 0 success, 1 errors, 0 warnings

查询:INSERT INTO V_userinfo VALUES('00005','壮壮','nanjiang')

错误代码: 1369
CHECK OPTION failed 'test.v_userinfo'

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec


2.5 再次查询数据

查询表

SELECT * FROM userinfo

结果
在这里插入图片描述

查询视图

SELECT * FROM V_userinfo

结果
在这里插入图片描述
可以清楚的发现,将入了“WITH CHECK OPTION”语句,00005这条数据无法插入进数据库中。

三、用法总结

WITH CHECK OPTION(带有检查选项)表示对update、insert、delete操作时保证更新、插入或者删除满足视图定义中的谓词条件(即子查询中的条件表达式)。
使用WITH CHECK OPTION的视图,对于数据插入,不满足where条件的数据,插入失败,错误代码1369。具有一个检查的功能。

with check option保证了通过视图进行的修改,必须也能通过该视图看到修改后的结果。
修改的结目标和结果都只在视图上呈现,这样不会影响其他视图。
所以你插入,那么插入这条记录在刷新视图后必须可以看到;
如果修改,修改完的结果也必须能通过该视图看到;
如果删除,当然只能删除视图里有显示的记录。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花北城

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值