Mysql之视图小结

Mysql之视图小结,第1张

概述使用视图的大部分情况是为了保障数据安全性,提高查询效率 。什么是视图? 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。 使用视图查询数据时,数据库系统会从原来的表中取出对应的

使用视图的大部分情况是为了保障数据安全性,提高查询效率,节省空间 。

什么是视图?

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。
数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。

使用视图的理由是什么?

1.安全性。一般是这样做的:创建一个视图,定义好该视图所 *** 作的数据。之后将用户权限与视图绑定。这样的方式是使用到
了一个特性:grant语句可以针对视图进行授予权限。
2.查询性能提高。
3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少修改的效果。这是在实际开发中比较有用的。例子:假如因为某种需要,a表与b表需要进行合并起来组成一个新的表c。最后a表与b表都不会存在了。而由于原来程序中编写sql分别是基于a表与b表查询的,这就意味着需要重新编写大量的sql(改成向c表去 *** 作数据)。而通过视图就可以做到不修改。定义两个视图名字还是原来的表名a和b。a、b视图完成从c表中取出内容。
说明:使用这样的解决方式,基于对视图的细节了解越详细越好。因为使用视图还是与使用表的语法上没区别。比如视图名a,那么查询是”select * from a”。
4.复杂的查询需求。可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。视图的工作机制:当调用视图的时候,才会执行视图中的sql,进行取数据 *** 作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容是一致的。视图这样设计有什么好处?节省空间。内容是总是一致的话,那么我们不需要维护视图的内容,维护好真实表的内容,就可以保证视图的完整性了。

更新视图可以更新真实表。

原因,我是这样理解的:视图并没有保存内容。只是引用数据。那么,更新视图,其实就是以引用的方式 *** 作了真实表。
with check option:这个可选子句用于对视图进行更新 *** 作的时,检查更新后的值是否还是满足视图公式定义的条件。通俗点,就是所更新的结果是否还会在视图中存在。如果更新后的值不在视图范围内,就不允许更新如果创建视图的时候,没有加上with check option,更新视图中的某项数据的话,MysqL并不会进行有效性检查。删掉了就删掉了。在视图中将看不到了。

创建视图
create or replace vIEw MysqL_test.customers_vIEw   --创建视图customers_vIEw,当该视图存在时,会替换原有视图asselect * from MysqL_test.customerswhere cust_sex="M"with check option;
修改视图定义

修改视图的定义,可以通常先使用drop vIEw 语句,再使用create vIEw语句的过程来实现。也可以直接使用上面的create or replace vIEw 语句来实现。

删除视图
drop vIEw MysqL_test.customers_vIEw;//删除视图
查看视图定义
show create MysqL_test.customers_vIEw;
更新视图数据
insert into MysqL_test.customers_vIEw values(909,'周明','洪水区');
update MysqL_test.customers_vIEwset cust_address='上海市';

注意,若一个视图依赖于多个基础表,则一次视图数据修改 *** 作只能改变一个基础表中的数据。在视图中包含分组或聚合的话,就不允许进行数据更新。

删除视图数据
delete from MysqL_test.customers_vIEw where cust_name='周明';

注意,对于依赖多个基础表的视图,不能使用delete语句。

视图查询

视图一经定义后,就可以如同查询数据库中的表一样对视图进行数据查询,这也是对视图使用最多的一种 *** 作。视图用于查询检索,主要体现在这样一些应用:
(1)利用视图简化复杂的表连接
(2)使用视图重新格式化检索出的数据
(3)使用视图过滤不需要的数据

对视图的进一步说明

(1)视图不能索引,也不能有关联的触发器,默认值或规则。
(2)视图可以和表一起使用。

总结

以上是内存溢出为你收集整理的Mysql之视图小结全部内容,希望文章能够帮你解决Mysql之视图小结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1151385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存