MySQL——视图
核心知识点:
1.视图定义
2.视图的好处:安全、节约资源、操作简单,数据的同一性
3.视图的基本操作
一、视图概论
视图是一个虚拟表,其内容由查询定义。
同真实的表一样,视图包含一系列带有名称的列和行数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
行和列数据来自由定义视图的查询所引起的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。
定义视图的筛选可以来自当前或其他数据库的一个或者多个表,或者其他视图。
通过视图查询没有任何限制,通过它们进行数据修改时的限制也很少。
视图是存储在数据库中的查询的SQL语句,它主要处于两种原因:
第一,安全原因,视图可也隐藏一些数据,例如:社会保险基金表,可以用视图只显示姓名,而不显示社会保险号和工资数等。
第二,可使复杂的查询易于理解和使用,这个视图就像一个“窗口”,从中只能看到你想看到的数据列。
这意味着你可以在这个视图上使用select *,而你看到的是你在视图定义里给出的那些数据列。
既然视图的定义是基于基本表的,那为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:
1.视图能简化用户操作。
视图机制使用户可以将注意力集中在所关心地数据上。
如果这些数据不是直接来自基本表,则可以通过定义视图,是数据库看起来结构简单、清晰,并且可以简化用户地数据查询操作。
例如,那些定义了若干张表连接地视图,就将表与表之间的连接操作对用户隐藏起来。
换句话说,用户所做的只是对一张虚拟的简单查询,而这个虚表是怎样得来的,用户无需了解。
2.视图使用户能以多种角度看待同一数据
视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。
3.试图对重构数据库提供了一定程度的逻辑独立性
数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。
数据库的逻辑独立性是指当数据库重构时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。
层次数据库和网状数据库一般能较好地支持数据地物理独立性,而对于逻辑独立性则不能完全地支持。
4.试图能够对机密数据提供安全保护
有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应该看到这些数据的用户视图上。
这样视图机制就自动提供了对机密数据的安全保护功能。
5.节约系统资源
视图类似于映射,它是一张虚拟表,并不是真实的存在磁盘上,而是由视图命令动态生成的,这样可以可能的减少冗余。
二、实例解释
现在我有一张学生信息的表,里面有学生的基本信息以及学生的账号和密码,但是这张表我不想直接展示出来,因为这样不安全。
需求1:我只想展示学生的基本信息,同时学生能更改展示的信息,默认只能更改自己的信息。
#学生信息表,但是不能公开
mysql> select * from student_info;
+----+--------+---------+--------------+------------+-----------+
| id | name | dorm | addr | account | passwd |
+----+--------+---------+--------------+------------+-----------+
| 1 | 科比 | 6号楼 | 湖北罗田 | 1041031711 | dfghjkldf |
| 2 | 毛线 | 6号楼 | 湖北孝感 | 1041031715 | tyujkljk |
| 3 | 黄鱼 | 5号楼 | 湖北罗田 | 1041031732 | 5uy9g6 |
| 4 | 子豪 | 6号楼 | 江苏扬州 | 1041031721 | rtyui |
| 5 | 星爷 | 5号楼 | 湖北孝感 | 1041031743 | tghj8g |
| 6 | 代鹏 | 5号楼 | 江苏盐城 | 1041031701 | gvhui745 |
| 7 | 子栋 | 6号楼 | 湖北洪湖 | 1041031723 | 568g29 |
| 8 | 周攀 | 6号楼 | 湖北武穴 | 1041031719 | 976uyif |
| 9 | 大爷 | 5号楼 | 湖北通城 | 1041031710 | cvbdf |
| 10 | 小鸟 | 6号楼 | 湖北襄阳 | 1041031737 | 456dfg |
+----+--------+---------+--------------+------------+-----------+
10 rows in set (0.00 sec)
我们创建一个视图,不包含自己的账号密码
#创建视图
mysql> create view student_info_view as select id,name,dorm,addr from student_info;
Query OK, 0 rows affected (0.00 sec) #只展示这张表,这张表并不存在,从主表映射
mysql> select * from student_info_view;
+----+--------+---------+--------------+
| id | name | dorm | addr |
+----+--------+---------+--------------+
| 1 | 科比 | 6号楼 | 湖北罗田 |
| 2 | 毛线 | 6号楼 | 湖北孝感 |
| 3 | 黄鱼 | 5号楼 | 湖北罗田 |
| 4 | 子豪 | 6号楼 | 江苏扬州 |
| 5 | 星爷 | 5号楼 | 湖北孝感 |
| 6 | 代鹏 | 5号楼 | 江苏盐城 |
| 7 | 子栋 | 6号楼 | 湖北洪湖 |
| 8 | 周攀 | 6号楼 | 湖北武穴 |
| 9 | 大爷 | 5号楼 | 湖北通城 |
| 10 | 小鸟 | 6号楼 | 湖北襄阳 |
+----+--------+---------+--------------+
10 rows in set (0.00 sec)
我们只展示外面的这张表,这样就安全了好多,同时不用创建另一张信息表,这样也节约资源。
我们还可以删除和更改视图,能够同步到原表
mysql> delete from student_info_view where id = 1; #删除第一条记录
Query OK, 1 row affected (0.01 sec) mysql> select * from student_info; #原表也删除了记录
+----+--------+---------+--------------+------------+----------+
| id | name | dorm | addr | account | passwd |
+----+--------+---------+--------------+------------+----------+
| 2 | 毛线 | 6号楼 | 湖北孝感 | 1041031715 | tyujkljk |
| 3 | 黄鱼 | 5号楼 | 湖北罗田 | 1041031732 | 5uy9g6 |
| 4 | 子豪 | 6号楼 | 江苏扬州 | 1041031721 | rtyui |
| 5 | 星爷 | 5号楼 | 湖北孝感 | 1041031743 | tghj8g |
| 6 | 代鹏 | 5号楼 | 江苏盐城 | 1041031701 | gvhui745 |
| 7 | 子栋 | 6号楼 | 湖北洪湖 | 1041031723 | 568g29 |
| 8 | 周攀 | 6号楼 | 湖北武穴 | 1041031719 | 976uyif |
| 9 | 大爷 | 5号楼 | 湖北通城 | 1041031710 | cvbdf |
| 10 | 小鸟 | 6号楼 | 湖北襄阳 | 1041031737 | 456dfg |
+----+--------+---------+--------------+------------+----------+
9 rows in set (0.00 sec) mysql> select * from student_info_view; #查看视图
+----+--------+---------+--------------+
| id | name | dorm | addr |
+----+--------+---------+--------------+
| 2 | 毛线 | 6号楼 | 湖北孝感 |
| 3 | 黄鱼 | 5号楼 | 湖北罗田 |
| 4 | 子豪 | 6号楼 | 江苏扬州 |
| 5 | 星爷 | 5号楼 | 湖北孝感 |
| 6 | 代鹏 | 5号楼 | 江苏盐城 |
| 7 | 子栋 | 6号楼 | 湖北洪湖 |
| 8 | 周攀 | 6号楼 | 湖北武穴 |
| 9 | 大爷 | 5号楼 | 湖北通城 |
| 10 | 小鸟 | 6号楼 | 湖北襄阳 |
+----+--------+---------+--------------+
9 rows in set (0.00 sec)
更新也是一样。
需求2:现在有一张学生成绩表,学生可以看到学号信息,需要联合查询
#学生成绩表,缺学号
mysql> select * from student_score;
+----+--------+-------+-------+--------+
| id | name | linux | mysql | python |
+----+--------+-------+-------+--------+
| 1 | 科比 | 63 | 33 | 76 |
| 2 | 毛线 | 45 | 67 | 56 |
| 3 | 黄鱼 | 89 | 34 | 67 |
| 4 | 子豪 | 56 | 78 | 56 |
| 5 | 星爷 | 56 | 90 | 78 |
| 6 | 代鹏 | 89 | 96 | 87 |
| 7 | 子栋 | 67 | 76 | 45 |
| 8 | 周攀 | 34 | 56 | 45 |
| 9 | 大爷 | 56 | 54 | 60 |
| 10 | 小鸟 | 78 | 75 | 67 |
+----+--------+-------+-------+--------+
10 rows in set (0.00 sec)
我们再创建一张视图
#创建视图,后面使用联合查询,可以来自不同的库
mysql> create view student_score_view as select a.id,a.name,b.account,a.linux from student_score a,student_info b where a.name = b.name;
Query OK, 0 rows affected (0.01 sec) mysql> select * from student_score_view;
+----+--------+------------+-------+
| id | name | account | linux |
+----+--------+------------+-------+
| 1 | 科比 | 1041031711 | 63 |
| 2 | 毛线 | 1041031715 | 45 |
| 3 | 黄鱼 | 1041031732 | 89 |
| 4 | 子豪 | 1041031721 | 56 |
| 5 | 星爷 | 1041031743 | 56 |
| 6 | 代鹏 | 1041031701 | 89 |
| 7 | 子栋 | 1041031723 | 67 |
| 8 | 周攀 | 1041031719 | 34 |
| 9 | 大爷 | 1041031710 | 56 |
| 10 | 小鸟 | 1041031737 | 78 |
+----+--------+------------+-------+
10 rows in set (0.00 sec)
如果要查看账号的同时,并且看分数,那就要联合查,SQL语句非常繁琐,而使用视图就可以简化操作过程
总结:视图的基本操作
创建视图:
CREATE VIEW 视图名 as SQL查询;
使用视图:
SELECT * FROM 视图名;
更新视图记录:
UPDATE 视图名 SET 字段名= xxx WHERE XXXX;
删除视图记录:
DELETE FROM 视图名 WHERE xxxx;
删除视图:
drop view 视图名;
MySQL——视图的更多相关文章
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
- MySQL视图view/存储过程和函数的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- MySQL视图更新
昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...
- 一个MySQL视图的优化过程
1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...
- mysql视图和临时表的区别
视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...
- MySQL视图(view)
一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...
- 11.Mysql视图
11.视图11.1 什么是视图 视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...
随机推荐
- 10分钟-jQuery-基础选择器
1.id 选择器 jquery能使用CSS选择器来操作网页中的标签元素.假设你想要通过一个id号去查找一个元素,就能够使用例如以下格式的选择器: $("#my_id") 当中#my ...
- Oracle创建表空间与用户
/* 说明:若已经存在相应的用户和表空间,则需要先删除相应的用户和表空间 然后再全部重新建立 */ --删除用户 drop user XDAYWEIXIN cascade; --删除表空间 drop ...
- ASP.NET CORE RAZOR :将文件上传至 ASP.NET Core 中的 Razor 页面
本部分演示使用 Razor 页面上传文件. 本教程中的 Razor 页面 Movie 示例应用使用简单的模型绑定上传文件,非常适合上传小型文件. 有关流式传输大文件的信息,请参阅通过流式传输上传大文件 ...
- karma + phantom + mocha + sion + chai + nightwatch + selenium2(webdriver) 测试框架学习
第三方的教程传送门 https://segmentfault.com/a/1190000004558796 karma # github https://github.com/karma-runner ...
- UVA 11354 - Bond (最小生成树 + 树链剖分)
题目链接~~> 做题感悟:这题開始看到时感觉不是树不优点理,一想能够用 Kruskal 处理成树 ,然后就好攻克了. 解题思路: 先用 Kruskal 处理出最小生成树.然后用树链剖分 + 线段 ...
- java 原生定时执行程序(ScheduledExecutorService)
package ThreadPoolTest; import java.util.Date; import java.util.concurrent.*; public class Main { pu ...
- java基础之概谈xml文件解析
XML已经成为一种非常通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. 诸多web应用框架,其可配置的编程方式,给我们的开发带来了非常大程度的便捷,但细细 ...
- 【数据挖掘】分类之decision tree(转载)
[数据挖掘]分类之decision tree. 1. ID3 算法 ID3 算法是一种典型的决策树(decision tree)算法,C4.5, CART都是在其基础上发展而来.决策树的叶子节点表示类 ...
- java并发阻塞队列
Java 并发编程利用 Condition 来实现阻塞队列 You are here: 开发&语言 - Java 文章 发布于 2017年06月26日 阅读 944 并发编程 什么是阻 ...
- CLR内存回收机制
代龄机制. 通过递归构建可达对象图,不可达的对象会被回收,然后CLR会矫正对象指针. 对于终止化/Finalize对象, 一开始时这些对象指针/根/引用会被放到终止化链表中,当CLR垃圾收集开始时,那 ...