定义:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

1、视图是一个虚拟存在的表,视图可以包含表的全部或者部分记录,也可以由一个表或者多个表来创建。使用视图就可以不用看到数据表中的所有数据,而是只想得到所需的数据。当我们创建一个视图的时候,实际上是在数据库里执行了SELECT语句,SELECT语句包含了字段名称、函数、运算符,来给用户显示数据。

2、视图在外观上和很相似,但是它不需要实际上的物理存储数据还是存储在原来的表里。在数据库中,只存放了视图的定义,并没有存放视图的数据,视图的数据是依赖原来表中的数据的,所以原来的表的数据发生了改变,那么显示的视图的数据也会跟着改变,例如向数据表中插入数据,那么在查看视图的时候,会发现视图中也被插入了同样的数据。视图实际上是由预定义的查询形式的表所组成的。

3、在数据库中,视图的使用方式与表的使用方式一致,我们可以像操作表一样去操作视图,或者去获取数据。一般来说,我们只是利用视图来查询数据,不会通过视图来操作数据。

4、基于视图可以创建视图

5、视图增加了数据的安全性和逻辑独立性,数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。视图可以只展现数据表的一部分数据,对于我们不希望让用户看到全部数据,只希望用户看到部分数据的时候,可以选择使用视图。

用法:

1、创建视图(CREATE VIEW 视图名称[(column_list)] AS SELECT 语句)

create view employee_view as SELECT * from employee;

完整的创建视图的格式

CREATE ALGORITHM VIEW 视图名称[(column_list)] AS SELECT 语句  WITH  [CASCADED|LOCAL] CHECK OPTION

  1)CASCADED 默认值,表示更新视图的时候,要满足视图和表的相关条件

  2)LOCAL:表示更新视图的时候,要满足该视图定义的一个条件即可


create view employee_view as SELECT * from employee WITH CASCADED CHECK OPTION;

看到很多例子,更新视图可以更新真实表。原因,我是这样理解的:视图并没有保存内容。只是引用数据。那么,更新视图,其实就是以引用的方式操作了真实表
with check option:对视图进行更新操作的时,需要检查更新后的值是否还是满足视图公式定义的条件。通俗点,就是所更新的结果是否还会在视图中存在。如果更新后的值不在视图范围内,就不允许更新如果创建视图的时候,没有加上with check option,更新视图中的某项数据的话,mysql并不会进行有效性检查。删掉了就删掉了。在视图中将看不到了。所以使用WHIT [CASCADED|LOCAL] CHECK OPTION选项可以保证数据的安全性

2、查看视图数据(select column_list from view)

SELECT * FROM employee_view;

3、查看视图(show create view view_name)

 show CREATE view employee_view;

4、删除视图(drop view view_name)

drop view employee_view

5、修改视图

  1)CREATE OR REPLACE VIEW 视图名称[(column_list)] AS SELECT 语句

create or replace view employee_view as select eid,ename,salary FROM employee;

  2)ALTER VIEW视图名称[(column_list)] AS SELECT 语句

alter view employee_view as SELECT * FROM employee;

6、修改视图中的数据(update view_name set column where 语句)

UPDATE employee_view set ename='小红' WHERE ename='小个';

最新文章

  1. org.eclipse.swt.custom.StyledText.getScrollbarsMode()I
  2. iOS阶段学习第16天笔记(Category-NSSet-SEL-NSIndexSet 操作)
  3. Sprint Three 回顾与总结&发表评论&团队贡献分
  4. Boolean强制转换
  5. tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案
  6. *[hackerrank]Jim Beam
  7. Java-泛型编程-使用通配符? extends 和 ? super
  8. centos 6.6编译安装nginx--来自阿里云帮助文档
  9. IOS 实现QQ好友分组展开关闭功能
  10. 无序线性搜索(Unordered Linear Search)
  11. NServiceBus 入门2
  12. Vue评论组件案例
  13. jpa使用过程中出现问题记录[持续更新]
  14. prometheus 基于DNS的目标发现
  15. Centos6.8上httpd配置腾讯云SSL证书
  16. python 全栈开发,Day106(结算中心(详细),立即支付)
  17. leetcode1002
  18. Codeforces 838B - Diverging Directions - [DFS序+线段树]
  19. poj1661 (DP)
  20. 原生 JS 的 Base64 转码

热门文章

  1. Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)
  2. 菜鸟搭建Android环境~~~~绝对靠谱
  3. VS2012配置Lua环境
  4. weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
  5. bzoj 3293 数学整理
  6. Mac上安装 mySql
  7. 【BZOJ】【2753】【SCOI2012】滑雪与时间胶囊
  8. 【BZOJ】【3439】Kpm的MC密码
  9. 2014ACM/ICPC亚洲区北京站 上交命题
  10. ios kvo