SQL语言之视图

前言

本章我们将学习MySQL中的视图,视图是数据库中的重要组件,本文将从视图是什么,视图的作用,创建和使用视图以及修改视图这些方面讲解视图。

视图是什么

视图View是一种虚拟的表,本身不保存数据,内部封装了一条SELECT语句,数据来源于查询的一张或多张实际数据的表。

视图的结构和真实的表相同,也是有行和列组成,在视图上也可以进行增删改查的操作。

视图的作用

视图主要用于查询,使用视图的优点是:

简单

视图可以将复杂的查询语句进行封装,用户使用时不需要关心表的结构、连接关系、筛选条件、分组和排序等等,只需要对视图进行简单的查询。

安全

创建视图时,可以筛选掉一些不希望用户看到的行和列,也可以给视图设置访问权限,让不同级别的用户看到不同的视图,从而提高数据库的数据安全性。

视图的语法

创建视图

create view视图名

as

select语句;

删除视图

drop view视图名;

修改视图

replace view 视图名

as

select语句;

使用视图

selec * from 视图名 [where 条件];

代码案例:

-- 在单表上创建视图 查询女同学的视图

create view view_female_stu

as

select * from tb_student where stu_gender = '女';

-- 使用视图

select * from view_female_stu

-- 使用连接查询创建视图,查询学生姓名、课程和分数

create view view_stu_score

as

select s.stu_id 学号, s.stu_name 姓名,c.course_name 课程,sc.score 分数

from tb_student s left join tb_score sc on s.stu_id = sc.stu_id

left join tb_course c on c.course_id = sc.course_id;

-- 使用视图

select * from view_stu_score where 分数 > 80;

注意:在创建视图时,查询语句中的别名会作为视图的列名

视图的修改

视图主要用于查询,但是也可以执行insert、update和delete语句,结果会映射到视图关联的实际表中。

-- 更新学生的年龄

update view_female_stu set stu_age = stu_age + 3 where stu_id = 4;

执行上面代码的结果是,实际的tb_student表被更新了。

-- 更新学生分数

update view_stu_score set 分数 = 83 where 学号 = 1;

执行上面代码的结果是,更新失败,出现错误:

为什么有的视图可以更新,而有的会失败呢?

下面情况的视图不可以执行insert、update和delete操作:

多表连接

包含distinct

包含聚合函数

包含group by

包含order by

包含union、union all

包含子查询等

所以对视图执行DML操作的限制条件还是很多的,大多数情况下我们还是对视图进行查询,如果需要DML操作还是建议对实际表进行操作。

总结

视图是一种虚拟的表,数据来源于从实际表中查询的结果,它可以简化查询操作,以及提高数据库的安全性,本章学习了视图的创建和使用语法,视图可以修改但是有比较多的限制条件,一般还是用于查询。

4. 哪些视图中的数据不可以增删改操作?_MySQL之视图相关推荐

  1. Oracle 原理: 视图,对视图进行增删改操作

    Oracle的视图和SQLServer的视图基本一样. 视图,是一个虚拟的表,不会给视图分配存储空间.视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表".可以就像 ...

  2. 关于从基于Mult-Org的视图中查询数据的问题(转)

    .Report视图中的数据? fnd_global.APPS_Initialize( user_id=>3070, resp_id=>50650, resp_appl_id =>20 ...

  3. 如何在使用ASPMVC4的分部视图中获取数据展示

    如何在使用ASPMVC4的分部视图中获取数据展示 在ASPMVC4中,创建的网站项目会用到分部视图,通过@Html.Partial("视图名")来加载到页面上: 但是如何把数据附加 ...

  4. sql server中如何修改视图中的数据?

    原文地址::https://www.cnblogs.com/xielong/p/10516975.html 相关文章 1.MYSQL 视图的不可以更改数据----https://blog.csdn.n ...

  5. mysql视图中可以删除数据吗_sql問題 删除视图中的数据,表中的数据会删除吗?

    如果你那个视图,是 单表的, 没写 触发器的. 那么 如果 删除视图中的数据 成功了,那么 表中的数据 就被删除了. 如果那个视图, 写了个 INSTEAD OF 触发器. 但是里面没有任何删除的动作 ...

  6. Python字典(字典的定义,创建字典,获取字典中的数据,字典元素增删改,获取字典视图,字典的遍历,字典的特点,字典生成公式)

    1.字典的定义 2.创建字典 3.获取字典中的数据 4.字典元素增删改 5.获取字典视图 lst={'数值1':300,'数值2':100,'数值3':400,'数值4':200} print(lst ...

  7. python导入txt文件并绘图-Python实现读取txt文件中的数据并绘制出图形操作示例

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

  8. 访问其他程序中的数据(ContentResolver的CRUD操作)

    内容提供器的用法一般有两种: 1.使用现有的内容提供器来读取和操作相应程序中的数据 2.创建自己的内容提供器给我们程序的数据提供外部访问接口. 如果一个应用程序通过内容提供器对其数据提供了外部访问接口 ...

  9. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

最新文章

  1. IT兄弟连 JavaWeb教程 jQuery中其他AJAX支持的函数
  2. 浅谈前端安全问题及策略
  3. ElasticSearch 索引基本操作_04
  4. PDF控件Aspose.Pdf 18年新版18.1发布 | 附下载
  5. MIUI ROM for Milestone 刷机教程
  6. 新人学习opencv图像处理的笔记,一:c++操作图像放大
  7. 一篇文章带你了解网页框架——Vue简单入门
  8. 读后感—肿瘤基因检测行业会好吗
  9. JavaScript:用JS函数隐藏浏览器地址栏 .
  10. 太阳直射点纬度计算公式_高中地理——每日精讲1题(地震、太阳高度角、极昼、昼夜长短)...
  11. 【THREE源码解析篇】THREE.Sprite详解
  12. Android组件化架构实践,全套教学资料
  13. 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
  14. 基于linux上搭建红楼梦知识图谱---后续
  15. 百度智能云开物凭什么在“双跨”新增名单中排名榜首?
  16. linux下查找java进程占用CPU过高原因
  17. 我的世界服务器区块修复,MC新人解决区块错误问题教程详解
  18. 2018北大cls夏令营经历
  19. STC-ISP的定时器计算器初值计算
  20. 变压器的试验原理及方法

热门文章

  1. javascript 进度条的几种方法
  2. 【转】浏览器缓存机制
  3. NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目
  4. 纹理窗口Qt+OpenGL之纹理贴图
  5. 如何weak link一个framework (高版本兼容低版本)
  6. silverlight动态添加xaml物件
  7. es 根据_id查询_京东把 Elasticsearch 用得真牛逼!日均5亿订单查询完美解决
  8. linux的mysql如何删除用户_linux mysql增加用户,删除用户,以及用户权限
  9. html ios按钮,ios样式开关按钮jQuery插件
  10. centos7 访问php页面显示源码_运维干货分享:centos7下源码编译安装php-7.1.5(脚本)...