MySQL视图

【注:视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询,而自身不包含任何数据。】
10.1,视图相对于普通表的优势:
简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集
安全:使用视图的用户只能访问他们被循序查询的结果集,对表的权限管理并不能限制到某个行某个列,三十通过视图就可以简单地实现查询
数据独立:一旦视图的结构确定了,就可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响
10.2,以下类型的视图不可更新:
包含以下关键字的sql语句:聚合函数(sum,min,max,count等),distinct,group by,having,union或者union all;
常量视图;
select 中包含子查询;【注;可以先将子查询定义为一个视图,然后对该视图在创建视图就可以实现类似的功能了】
join;
from一个不能更新的视图;
where字句的子查询引用了from字句中的表
10.3,视图的创建,修改,删除,查看
创建:CREATE OR REPLACE VIEW hi_admin_view as SELECT * FROM hi_admin WHERE broker_id>1 with local check option; 【with [cascaded | local] check option决定了是否允许更新数据是巨鹿不在满足视图的条件;local只要满足本视图的条件就可以更新,cascade则必须满足所有针对该视图的所有视图的条件才可以更新【注:即如果对一个表创建了多个视图,给予了多个条件,如果对于其中一个视图修改之后不满足于其他视图的条件,会提示错误并推出 P173】,如果没有明确是local还是cascade,则默认是CASCADE】
更新:alert view 视图名 as 【新select查询】
删除:drop view 视图名;
查看:mysql5.1版本后show tables也会显示视图的名字。show views亦可;show table status like 视图;查询某个视图的定义:show create view 视图;
【注:数据表修改之后,视图也随之修改;反之也成立】
10.4,视图与表对比理解:
1,在使用视图的时候,与使用表的语法是一样的;
2,在创建视图的时候,不允许出现名字重复,视图也是表,一种虚拟表;
3,在创建视图的时候,可以使用create view user(name ,pwd)可以定义视图的结构
4,在数据库中,可以创建的试图数目没有限制;
5,视图可以嵌套,即利用其它视图中查询出来的数据构建新的视图;
6,roder by可以用在视图中,但是如果从该视图检索数据的select中也包含order by,那么该视图中的order by将会被覆盖;
7,视图不能有索引,也不能有关联的触发器和默认值;
8,视图可以和表一起使用,例如编写一条表和视图的查询;
10.5,视图在mysql的内部管理机制
【注:视图的记录都保存在information_schema数据库中的一个叫views的表中。具体某个视图的定义代码以及属于哪个数据库等信息可以从里面看到理解视图的两种工作机制;】
eg:select * from user;
1,确认是视图的过程:user也可以是表名。由于表与视图的物理机制不同。视图本身是不存储内容的。所以,在使用sql的
时候,mysql是怎么知道user是一个视图还是表。是因为有一个查看目录的例程在做这件事。
2,mysql对处理视图的两种方法:替代方式和具体化方式。
【注:不到万不得已,不要对视图进行更新操作,因为效率低。视图主要用于查询数据】
存储过程:
存储过程是一组为了完成某个特定功能而编写的并运行在数据库端的SQL程序集。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
优点:
通过把处理封装在简单易用的单元中,简化复杂的操作【注:可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句】;
提高性能。使用存储过程比使用单独的SQL语句要快【注:存储过程在创建时即在服务器上进行编译】;
安全,调用者只需要调用指定的存储过程即可,而不用关心存储过程的内容;
缺点:
编写复杂;
安全,调用者只需要调用指定的存储过程即可,而不用关心存储过程的内容

【SQL里面不带参数的存储过程与视图的区别】
1、存储过程是程序化的sql可以实现一般sql不能实现的功能。
如:先检索一个表得到一些数据,经过一定的编辑后更新到另外一个表中、这就可以用不带参数的存储过程实现。
2、视图是虚拟表,不存储数据,存储的是sql,检索他的时候实际上是执行定义它的sql语句。
说明:从你的问题上可以看出,你使用存储过程仅仅是用它检索数据,所以你会产生这样的疑问,一定要记住,存储过程理解的简单一点就是“数据库中的程序”,
可以在不需要外部程序(如C,java,vb等)的情况下,让数据库自己解决复杂的、用一般sql不能实现的功能,而视图则不然。
【注:
视图只不过是存储在sql server上的select语句罢了,当对视图请求时,sql server会像执行一句普通的select语句那样的执行视图的select语句,它的性能并不像人们想象得那么出色。
而存储过程在编译后可以生成执行计划,这使得每次执行存储过程的时候效率将会更高,这是存储过程,另外台提交参数的时候,使用存储过程将会减少网络带宽流量,这是存储过程相对于普通的sql语句在性能上的最大的优势。

【总结:】
视图是由查询结果生成的虚拟的表,我么可以对视图进行增加,修改和更新的操作,只要有一定的限制,只要保证视图中所涉及的字段全部来源于一个表,而且不能使用派生字段,一定是表中原有字段,还有一点就是,没有出现在视图中的其他字段,在创建爱你表时一定允许为空,这样我们就可以操作视图来影响原表了。
我们可以把视图当做表来操作,而存储过程不是表,我们不可以直接操作它,只可以查询 ,在某种程度上,存储过程的执行速度要比普通的检索语句要快 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值