-
2019-08-21 17:38:47
首先了解一下什么是视图。
在我们查询的过程中,select column1,column2…… from table,此时会出来一个结果,这个我们所看到的结果是一个表的样子,那么这个虚表就是一个视图view(为什么叫“虚表”,因为数据库中确实不存在这个表,但是我们又能在显示器上看到一张表。强行解释)。也就是说,视图是一个查询逻辑所表现出来的东西,你可以在某一方面将它等同于查询逻辑。
然而,我们可以create view,创建了视图之后,还可以将这个view作为表格供我们查询,即可以select * from view_name,那么是不是view逆袭变成了表呢,非也非也。这是因为我们在调用的一瞬间,触发了生成view的逻辑,从而暂时有了一张“虚表”供我们查询。
是不是要疯了,这到底什么跟什么啊,那为什么有视图这种东西的存在???看下去:
1)视图它是虚拟的表,不占用存储空间,所以如果是我们在进行复杂的查询过程,不想进行表套表的话,可以在中间生成视图,然后在下一步直接引用视图(当然,你也可以生成中间表。但是假如你的存储空间只有10w,生成的中间表需要占用8w的存储空间,生成表后你剩下2w想干啥,此时通过生成view就可以避免了)。这是视图的第一个好处。2)视图view是动态的。创建的视图来源于其他的实实在在的表,当随着时间的更新,表发生变化时,我们的视图所反应的内容其实也是变化的。而我们所生成的中间表固定了就是固定了,不会随着基表的变化而改变。因此,如果我们做任务所需要的表格是不断更新的,此时我们在中间创建视图是正确的选择,因为视图可以做到与时俱进。
更多相关内容 -
MySQL数据库中的View(视图)
2019-07-08 16:40:14视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。 创建视图的语法: CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])] AS subquer...什么是视图 ?
视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。创建视图的语法:
CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])] AS subquery ;
eg:
create or replace view v_student as select * from student;从视图中检索数据
select * from v_student;删除视图
drop view v_student;查询数据库中所有视图
SHOW TABLE STATUS WHERE COMMENT=“view”;视图创建后,可以像操作表一样操作视图,主要是查询操作。
语法中的Subquery是SELECT查询语句,对应的表被称作基表。根据视图所对应的子查询种类分为几种类型:
1、SELECT语句是基于单表建立的,且不包含任何函数运算、表达式或分组函数,叫做简单视图,此时视图是基表的子集;
2、SELECT语句同样是基于单表,但包含了单行函数、表达式、分组函数或GROUP BY子句,叫做复杂视图;
3、SELECT语句是基于多个表的,叫做连接视图。视图的作用
如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询;
视图本质上就是一条SELECT语句,所以当访问视图时,只能访问到所对应的SELECT语句中涉及到的列,对基表中的其它列起到安全和保密的作用,可以限制数据访问。数据库视图的优点
1、数据库视图允许简化复杂查询:数据库视图由与许多基础表相关联的SQL语句定义。 您可以使用数据库视图来隐藏最终用户和外部应用程序的基础表的复杂性。 通过数据库视图,您只需使用简单的SQL语句,而不是使用具有多个连接的复杂的SQL语句。
2、数据库视图有助于限制对特定用户的数据访问。 您可能不希望所有用户都可以查询敏感数据的子集。可以使用数据库视图将非敏感数据仅显示给特定用户组。
3、数据库视图提供额外的安全层。 安全是任何关系数据库管理系统的重要组成部分。 数据库视图为数据库管理系统提供了额外的安全性。 数据库视图允许您创建只读视图,以将只读数据公开给特定用户。 用户只能以只读视图检索数据,但无法更新。
4、数据库视图启用计算列。 数据库表不应该具有计算列,但数据库视图可以这样。 假设在orderDetails表中有quantityOrder(产品的数量)和priceEach(产品的价格)列。 但是,orderDetails表没有一个列用来存储订单的每个订单项的总销售额。如果有,数据库模式不是一个好的设计。 在这种情况下,您可以创建一个名为total的计算列,该列是quantityOrder和priceEach的乘积,以表示计算结果。当您从数据库视图中查询数据时,计算列的数据将随机计算产生。
5、数据库视图实现向后兼容。 假设你有一个中央数据库,许多应用程序正在使用它。 有一天,您决定重新设计数据库以适应新的业务需求。删除一些表并创建新的表,并且不希望更改影响其他应用程序。在这种情况下,可以创建与将要删除的旧表相同的模式的数据库视图。数据库视图的缺点
1、性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
2、表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。 -
数据库系统概念中table/view/schema/index的关系
2018-07-13 09:14:45操作对象创建删除修改模式CREATE SCHEMADROP SCHEMA 表CREATE TABLEDROP TABLEALTER TABLE视 图CREATE VIEWDROP VIEW 索...没有数据表,关键字、主键、索引等也就无从谈起。...操作对象 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTER TABLE 视 图 CREATE VIEW DROP VIEW 索 引 CREATE INDEX DROP INDEX 表
大家不一定要了解这个东西的准确定义是什么,但是一定要知道它是数据库的基础。
没有数据表,关键字、主键、索引等也就无从谈起。在数据库画板中可以显示数据库中的所有数据表,创建数据表,修改表的定义等。
数据表是数据库中一个非常重要的对象,是其他对象的基础。
模式
在MySQL中创建一个schema好像就跟创建一个database是一样的效果,在SQL Server和Orcal数据库中好像又不一样。所以我们要理解一下schema和table的关系。
schema和user的关系
在sql server2000中,用户和架构是不分离的,关系如下表:
直到了2005才分离。
通过这张表,我们可以看出,用户1可以访问架构1和架构3,用户2可以访问架构1和架构2,以此类推。user对于不同的schema有不同的权利。
schema、database以及table的关系
我们可以可以把database看作是一个大仓库,仓库分了很多很多的房间,schema就是其中的房间,一个schema代表一个房间,table可以看作是每个schema中的床,table(床)就被放入每个房间中,不能放置在房间之外。
然后床上可以放置很多物品,就好比table上可以放置很多列和行一样。数据库中存储数据的基本单元是table,现实中每个仓库放置物品的基本单位就是床。
User是对应与数据库的(即User是每个对应数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个schema(房间)的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙
还可以给user分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个user所对应的角色Role了。
总结来说,我们的数据库就是一个数据的大仓库,而里面创建了很多很多模式,分别放着不同的数据库对象(包括表),而不同的模式有不同的权限,于是,不同的用户就有不同的访问权限来访问某个模式里的数据库对象。
索引
1.数据库引入了索引
用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。为了提高检索数据的能力,数据库引入了索引机制。2.有关“索引”的比喻
从某种程度上,可以把数据库看作一本书,把索引看作书的目录,通过目录查找书中的信息,显然较没有目录的书方便、快捷。3.数据库索引实际是什么?(两部分组成)
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。4.索引在表中的角色
一个表的存储是由两部分组成的,一部分用来存放表的数据页面,另一部分存放索引页面。索引就存放在索引页面上。5.索引高效原理
通常,索引页面相对于数据页面来说小得多。当进行数据检索时,系统先搜索索引页面,从中找到所需数据的指针,再直接通过指针从数据页面中读取数据。视图
目前所说的概念,都是在逻辑层上进行的操作,而有的时候,我们需要做出来一个虚拟的表给用户看,除安全性考虑(视图是只读的)之外,更加考虑到用户的直觉问题(让他看到更合理的数据)。
视图(view)是从一个或几个基本表中根据用户需要而做成一个虚表。
1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据。
2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户。视图与查询的区别:
视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:
它们的区别在于:
1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.
2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.
3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行。比如:创建一个含有order by子句的视图,看一下可以成功吗?
view和table的关系
view和table的关系就像是cache和内存的关系。
内存中的数据修改之后,会对应修改cache的数据,但是不允许直接修改cache中的数据。
- 视图的更新通常是在显示的时刻(这非常像写时复制技术)
- 视图是只读的(因为通过视图更新是非常混乱的事情,如上文红字)
- 视图有可能被数据库缓存,所以对于查询量高的查询。
视图是可以被展开的,也就是说,可以用视图来定义视图(这个功能很cool吧),但是不可以递归定义。
视图的优点:
为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:
- 能分割数据,简化观点。可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作
- 为数据提供一定的逻辑独立性。 如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据
- 提供自动的安全保护功能。 视图能像基本表一样授予或撤消访问许可权
- 视图可以间接对表进行更新,因此视图的更新就是表的更新
-
对数据库视图view的理解
2015-11-02 11:01:42首先解释什么是视图: 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,...由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中首先解释什么是视图:
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表,与真实表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间,并且基表的变化会导致视图相应的改变
视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE:不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE:只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY : 该视图上不能进行任何DML操作
在SQL中修改视图中的数据会受到哪些限制?
------------------------------------
1、必须有权限
2、对由多表连接成的视图修改数据时,不能同时影响一个以上的基表,也不能删除视图中的数据
3、对视图上的某些列不能修改,这些列是:计算列,内置函数列和行集合函数列
4、对具有NOT NULL 的列进行修改时可能会出错。通过视图修改或者插入数据时,必须保证未显示的具有NOT NULL 属性的列有值,可以是默认值,IDENTITY 等,否则不能像视图中插入数据行。
5、如果某些列因为规则或者约束的限制不能接受从视图插入的数据时,则插入数据可能会失败
6、删除基表并不删除视图,建议采用与表明显不同的名字命名规则视图的有点:
1.视图可以隐藏你的查询的复杂性,例如:
SELECT d.dname,count(*) as NUM_EMPS
FROM emp e, dept d
WHERE e.deptno=d.deptno
GROUP BY dname;不需要输入如此复杂的查询(按照今天的标准来说,那其实并不算是复杂),我可以查询如下的一个视图:
SELECT dname,num_emps FROM my_view; (前提是你创建了基于上面查询的视图)
你也能够将好多相当复杂的查询存储为一个视图,这样就会将查询大大的简化。通过这种方式,视图就是一种宏,它可以在幕后做许多事情,并使得这个过程让终端用户或者应用程序看起来非常简单。
2,视图也可以用于加强安全性。让我们假设一下,我只想要用户BOB看到EMP表中的ENAME 和DEPNO两个列。我可以使用如下所示:
GRANT select ON emp TO bob;但是上面的命令会使BOB看到表的全部内容。我可以写下如下的一个视图,使BOB只看到自己能够看到的列:
CREATE VIEW bob_emp AS SELECT ename,deptno FROM emp; GRANT select ON bob_emp TO bob;
通过这两条命令,BOBO只能在视图中看到这个表中的两个列。
让我们更进一步的讨论一下安全性的概念。假设我们想要使得每个人都可以查询EMP表,但是只是他们自己的记录。我可以写出如下的视图:
CREATE VIEW my_emp AS SELECT * FROM emp WHERE ename=USER; GRANT select ON my_emp TO public;
当一个用户查询MY_EMP表示,上述视图只会返回那些ENAME列值为他们自己的用户名
Oracle视图非常强大的功能之一在于其可以创 建一个带有错误的视图。比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。当基表里加入了该字段,或者说某个字段修改成 视图里的该字段名称,那么视图马上就可以成为合法的。3.Oracle视图非常强大的功能之一在于其可以创 建一个带有错误的视图。
比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。当基表里加入了该字段,或者说某个字段修改成 视图里的该字段名称,那么视图马上就可以成为合法的。
视图的缺点:4.保存复杂查询
一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。
逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
5.视图的依赖性
由于视图的定义是一个引用了其他对象(表,视图)的查询,因此视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。
-
数据库VIEW(视图)
2015-06-30 21:24:42视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。 注释:数据库的设计和结构不会受到视图中的... -
微信小程序 数据库获取字符串 在view中显示 换行
2018-10-16 14:51:56需要在对应的wxss中添加属性white-space: pre-wrap; -
关于Django中view对数据库的调用
2017-06-19 20:25:05Django中对数据库的调用非常的隐蔽,在各种复杂的模块互相拼接继承中很难发现获取数据库内容的部分来,开始试图理解一下下首先,数据库中的表对应的是model中的每一个类,类中的变量对应表的属性,通常属性名就是... -
Sqlserver 在数据库‘master’中拒绝了Create Database的权限
2020-12-11 09:39:22若找不到您的当前的用户,可以在登录名这块右键新建登录名 搜索当前的用户名,如果是域账户需要点击下图中5所示的位置,然后找到您自己的机器 在您的登陆名上,点击右键,配置相应的服务器角色权限(这块需要... -
数据库-视图(View)详解
2017-05-09 10:41:30视图(View)可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata。 视图简单理解如下: ... -
MySQL 8.0 中 4 个默认的系统数据库
2020-06-11 22:11:02MySQL 8.0 默认安装的 4 个系统数据库:mysql 数据库存储了 MySQL 服务器正常运行所需的各种信息;information_schema 提供了访问数据库元数据的各种视图,包括数据库、表、字段类型以及访问权限等; performance_... -
Android Studio 移动开发 新建数据库并从数据库中获取到图片文字数据显示在Listview列表上
2021-03-22 21:46:24Android Studio中添加动态的数据库Database Inspector来可视化操作数据库 二、使用步骤 1.添加插件Database Inspector import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as ... -
在Eclipse中连接数据库、查看数据表、从数据库表生成实体类
2022-02-04 09:09:59点击Eclipse菜单项“Window”,选择“Show View”,然后再选择其中的“Data Source Explorer”,如下图所示,如果无法在“Show View”子菜单中直接找到“Data Source Explorer”,可以选择最下方的“Other...”,在... -
thinkphp5数据库查询构造器视图查询之View
2019-05-07 16:20:421、功能:视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图 2、代码截图实例 3、参数与返回值 根据上图可知view方法有4个参数 序号 参数 说明 1 join / 字符串 / 数组 join... -
在Android Studio中查看数据库文件的内容
2021-06-04 13:27:51春华秋衣从Android Studio查看数据库:编辑:要在仿真器上查看数据库,请按照以下步骤操作(对于实际设备,请滚动到底部):下载并安装SQLiteBrowser。将数据库从设备复制到PC:打开设备文件浏览器通过View > Tool ... -
在 Visual Studio 中创建一个数据库并添加表
2020-08-10 12:05:02在 Visual Studio 中创建一个数据库并添加表 可以使用 Visual Studio 来创建和更新 SQL Server Express LocalDB 中的本地数据库文件。还可以通过在 Visual Studio 的 "SQL Server 对象资源管理器工具" 窗口中... -
Django在视图中使用表单并和数据库进行数据交互
2021-07-19 16:27:12写在前面 博主近期有时间的话,一直在抽空看Django相关的项目,苦于...本博客记录的是《Django web 应用开发实战》这本书第八章表单与模型中的相关内容,主要内容是表单与数据库的交互。编译环境如下: Python3.7 py -
在Android Studio中操作SQLite数据库
2022-03-10 14:50:33} /** * 用于做数据库升级的方法,如果数据库的表或者表结构表以及数据关系都发生改变则需要在这里升级 * */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } } UserDao代码... -
Django项目实践3 - Django模型(view-数据库)
2015-04-16 19:34:07Django 模型 ...在当代 Web 应用中,主观逻辑经常牵涉到与数据库的交互。 数据库驱动网站 在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。 这个网站也可能会向 -
数据库中的view有何作用?
2013-07-03 11:22:43在数据库管理系统当中,view是描述数据库中信息的一种方式。若要将数据项按某种特定的序列排列、突出某些数据项,或者只显示特定的数据项,这些都可以通过view(视图)来实现。对于任何数据库来说,可能有一些视图需要... -
MySQL数据库:视图View
2018-11-28 01:03:50视图是一个虚拟表,数据库中只存储视图的定义,不存储视图对应的数据,在对视图的数据进行操作时,系统根据视图的定义去操作相应的基本表。 可以说,视图是在基本表之上建立的表,它的结构和内容都来自基本表,依据... -
如何在Linux系统中安装Oracle数据库
2019-07-28 07:43:06本文主要介绍了如何在Linux系统中快速安装Oracle数据库,包括前期的准备工作,Oracle数据库软件的安装、数据库的安装等内容。 硬件简介 系统:Oracle Linux 6.4 内核:2.6.39-400.17.1.el6uek.x86_64 内存:3GB ... -
android 将数据库中的信息显示在listview中 用哪种方法
2017-09-14 01:26:37将数据库中的大量的信息显示在listview中 用哪种方法最合适?想请问一下,现在我用的是LoaderManager.LoaderCallbacks<Cursor> 加上 CursorAdapter的方式,上网看了一下好多人的方法不一样,想请教一下哪种方法速度... -
学习 MySQL 必备的几个示例数据库
2020-06-17 16:47:54MySQL 官方网站提供了以下几个示例数据库:Sakila、Employees、world、world_x 以及 menagerie。这些数据库既可以用于日常学习和测试,也可以作为我们设计时数据库的一个参考。本文就来介绍一下这些数据库的模式结构... -
Android中连接MySql数据库获取数据的简单实现
2019-02-20 19:37:37一般情况下,Android与数据库中的数据进行交互都是通过调用api接口来实现的。但是今天我们就来尝试实现直接连接到MySql数据库获取数据的功能。 代码实现 demo很简单,xml布局文件显示的是一个按钮和一个textView... -
IDEA中使用SparkSQL连接Hive数据库报错:找不到表Table or view 'emp' not found
2018-07-03 11:11:30org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'emp' not found in database 'test1';解决方案:需要将hive-site.xml这个文件拷贝到resource下。问题解决!!... -
【Qt】Qt的数据库(Driver类、Query类、Model类、View类)
2018-11-28 09:56:41Qt提供了与数据库联动以开发应用程序的模块。与其他API相比,Qt提供的API更直观,也更容易理解。使用Qt提供的API之前,需要添加如下的头文件。 #include <QtSql> 为使用Qt开发应用程序,与使用C++... -
MVC 实现数据库的数据加载到view视图
2020-05-22 17:16:16最近刚接触到MVC的学习,下面通过一个小小的demo来实现ef数据怎么在View视图上显示 下面是demo的运用图 现在就具体代码实现: 1)因为要用到数据库里的数据,所以我们首先要实现在model层实现 ef数据模型,然后在... -
基础篇:数据库 SQL 入门教程
2021-09-02 21:13:58SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记录 SQL 可更新数据库中的数据 SQL 可从数据库删除记录 SQL 可创建新数据库 SQL 可在数据库中创建新表 SQL 可在数据库中创建存储过程 SQL... -
Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容
2022-03-03 17:56:31Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容一、介绍二、Android studio连接、操作和查看sqlite数据库三、在数据库中查找相关内容四、运行结果 一、介绍 Android studio中调用科大讯飞的语音...