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]
创建用户信息表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');
数据插入成功,如下图所示:
查询表
SELECT * FROM userinfo
结果
查询视图
SELECT * FROM V_userinfo
结果
修改视图
ALTER VIEW V_userinfo
AS
SELECT * FROM userinfo
WHERE city='zhengjiang'
WITH CHECK OPTION
运行结果:成功
插入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
查询表
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保证了通过视图进行的修改,必须也能通过该视图看到修改后的结果。
修改的结目标和结果都只在视图上呈现,这样不会影响其他视图。
所以你插入,那么插入这条记录在刷新视图后必须可以看到;
如果修改,修改完的结果也必须能通过该视图看到;
如果删除,当然只能删除视图里有显示的记录。