博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
view
阅读量:6072 次
发布时间:2019-06-20

本文共 2380 字,大约阅读时间需要 7 分钟。

/*视图视图view是一种虚拟存在的表,对于使用视图的用户涞水基本是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的视图相当于普通表的优势:    简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集    安全:使用视图的用户只能访问到他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现    数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响。源表修改列名,则可以通过修改视图来解决,不会对访问者造成影响*//*视图操作:     创建视图     修改视图     删除视图     查看视图定义   *//*创建视图的语法:        create [or replace] [algorithm={undefined|merge|temptable}]        view view_name[(column_list)]        as select_statement        [[with|cascaded] check option]修改视图的语法:        alter [algorithm={undefined|merge|temptable}]        view view_name[(column_list)]        as select_statement        [[with|cascaded] check option]mysql的视图定义有一些限制,例如:在From关键字后面不能包含子查询,这和其他的数据库是不同的。如果视图是从其他数据库上迁移过来的,那么可能需要因此做一些改动,可以先将子查询的内容先定义成一个视图,然后对该视图再创建视图就可以实现类似的功能了。     *//*引入视图:     什么是视图?为什么要使用视图?     有些时候,我们需要只针对一些列操作等,就要用到视图。     视图 view     view又被称为虚拟表,view是sql的查询结果,可以理解为物理表的一部分影子使用视图的好处:        1、简化复杂的查询        2、权限控制到列视图能不能更新,删除,添加?        首先,针对原始表的操作一定会影响到视图的更改视图的数据是否会影响到表呢?或者说能不能更改视图中数据呢?      总结出来的是:视图中数据的更改会影响到物理表。但是有些数据的更改无法进行。视图是物理表的特殊的映射构成。      当修改视图影响到的物理表的数据是可见的,客观上一一对应的,就可以更改,如果视图中更改的是某些列的平均值这样不可控的指定更改就会语句执行失败视图再内存中是怎么存储的呢?       视图再内存中存储的是视图的创建的查询语句使用视图的过程?        视图的使用过程分为两种情况:                      1、如果视图中的代码较少,sql的做法是将视图中的sql语句和操作视图的语句连接成一条语句直接操作物理表,这种操作视图的算法叫做 merge                      2、如果视图中的代码较多,sql的做法是先执行视图中的查询语句生成一张临时表,然后将对视图的操作转化成对临时表的操作,这种操作视图的算法叫做temptable        视图实际操作的算法可以自己制定,默认情况下也就是不指定sql就是按照上面的两种方式自动选择操作。指定只需要在view关键字前面加上algorithm={merge|temptable}指定算法*/select * from emp;--如果我只需要查询emp的ename和hiredate两个选项select ename,hiredate from emp;--也可以创建一个视图create view emp_n_hasselect ename,hiredate from emp; --然后直接查询视图就好了select * from emp_n_h;select ename,avg(sal) from emp group by ename order by avg(sal) limit 3;--这样代码显得有点多,可以使用视图优化下create view emp_n_avgsalas select ename,avg(sal) as avg_sal from emp group by ename;drop view emp_n_avgsal;select * from emp_n_avgsal order by avg_sal limit 3;--查询视图是查询不到物理表中的其他数据的update emp set ename='guo' where deptno=1;select * from emp;select * from emp_n_h;--update emp_n_h set ename='guozhen' where ename='guo';--可以发现这里是可以更改影响到物理表的select * from emp_n_avgsal;update emp_n_avgsal set avg_sal where ename='guozhen';-- 在这里操作会失败-- create [algorithm={undefined|merge|temptable}create algorithm=merge view emp_v1as select * from emp where deptno=2;

 

转载地址:http://kvngx.baihongyu.com/

你可能感兴趣的文章
学习树莓派的第二天
查看>>
阿里云发布企业数字化及上云外包平台服务:阿里云众包平台
查看>>
Oracle审计参数
查看>>
Mysql-MMM高可用群集部署
查看>>
为什么分布式一定要有消息队列?
查看>>
高并发大容量NoSQL解决方案探索
查看>>
MySQL基础语句
查看>>
python操作sql server2008 pyodbc
查看>>
H3C AP胖转瘦方法大全
查看>>
基于tcp/ip以太网通信实现0-5v,4-20ma模拟量AI采集以及模拟量AO输出控制-综科智控...
查看>>
PHP执行系统命令的有几个常用的函数
查看>>
lnmp命令整理
查看>>
SparkStreaming基础理论
查看>>
程序员笔记|Sharding-JDBC 使用入门和基本配置
查看>>
关于安装H3c Cloud Lab的一些报错问题
查看>>
java中split()方法中以"* ^ : | , ."作为分隔符的处理方法
查看>>
我国大数据未来的发展方向
查看>>
C语言学生成绩管理系统
查看>>
powershell远程检查多个oracle数据库表空间使用率
查看>>
C链表
查看>>