数据库视图

数据库操作:视图

青春壹個敷衍的年華 提交于 2020-03-08 17:20:43
视图是虚拟的表 。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 SELECT cust_name,cust_contact FROM customers,orders,orderitems WHERE customers.cust_id=orders.cust_id AND orderitems.order_num=orders.order_num AND prod_id='TNT2'; 此查询用来检索订购了某个特定产品的客户。 现在,假如可以 把整个查询包装成一个名为productcustomers的虚拟表 ,则可以轻松地检索出相同的数据。 SELECT cust_name,cust_contact FROM productcustomers WHERE prod_id='TNT2'; 这就是视图的作用。productcustomers是一个视图,作为视图, 它不包含表中应该有的任何列或数据,它包含的是一个SQL查询。 视图可以重用SQL语句,简化复杂的SQL操作,使用表的组成部分而不是整个表。 重要的是知道视图仅仅是用来查看存储在别处的数据的一种设施。 视图本身不包含数据 ,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。 与表一样,视图必须唯一命名;视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图

Materialized View

怎甘沉沦 提交于 2020-03-08 14:26:57
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好。 物化视图:是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照! 特点: (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到确认; (2) 物化视图也是一种段(segment),所以其有自己的物理存储属性; (3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证; 创建语句:create materialized view mv_name as select * from table_name 因为物化视图由于是物理真实存在的,故可以创建索引。 创建时生成数据: 分为两种:build immediate 和 build deferred, build immediate是在创建物化视图的时候就生成数据。 build deferred则在创建时不生成数据,以后根据需要在生成数据。 如果不指定,则默认为build immediate。 刷新模式:

Oracle之物化视图

微笑、不失礼 提交于 2020-03-08 14:15:37
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。 1、物化视图的类型:ON DEMAND、ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。 2、ON DEMAND物化视图 物化视图的创建本身是很复杂和需要优化参数设置的,特别是针 对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物 化视图的重要定义参数的默认值处理是我们需要特别注意的。 物化视图的特点: (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证; (2) 物化视图也是一种段(segment),所以其有自己的物理存储属性; (3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证; 创建语句

Oracle之物化视图

左心房为你撑大大i 提交于 2020-03-08 14:15:19
Oracle之物化视图 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于这方面的资料,便于提高,整理内容如下: 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。 1、物化视图的类型:ON DEMAND、ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。 2、ON DEMAND物化视图 物化视图的创建本身是很复杂和需要优化参数设置的,特别是针 对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物 化视图的重要定义参数的默认值处理是我们需要特别注意的。 物化视图的特点: (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证; (2) 物化视图也是一种段(segment)

Oracle中的视图和实例化视图之间有什么区别?

隐身守侯 提交于 2020-03-08 14:10:50
Oracle中的视图和实例化视图之间有什么区别? #1楼 物化视图 -磁盘上包含查询结果集的表 非标准化视图 -从基础表中提取数据的查询 #2楼 在Mike McAllister的漂亮回答中加了... 当编译器认为视图查询很 简单 时,只能将实例化视图设置为通过数据库 自动 刷新以检测更改。 如果认为它太复杂,它将无法设置本质上是内部触发器的组件来跟踪源表中的更改,从而仅更新mview表中的更改行。 创建实例化视图时,您会发现Oracle同时创建了mview 和具有相同名称的表 ,这会使事情变得混乱。 #3楼 视图: 视图只是一个命名查询。 它不存储任何内容。 视图上存在查询时,它将运行视图定义的查询。 实际数据来自表。 物化视图: 物理存储数据并定期更新。 查询MV时,它会提供MV中的数据。 #4楼 物化视图是由选择查询驱动的数据逻辑视图,但是查询结果将存储在表或磁盘中,查询的定义也将存储在数据库中。 物化视图的性能优于普通视图,因为物化视图的数据将存储在表中,并且表可能会被索引,因此连接速度更快,并且在物化视图刷新时也会进行连接,因此无需每次触发连接语句,视情况而定。 其他区别包括:在使用View的情况下,我们总是获取最新数据,但是在实现视图的情况下,我们需要刷新视图以获取最新数据。 在实例化视图的情况下,我们需要额外的触发器或某种自动方法,以便我们可以保持MV的刷新

高性能MySQL之事务

自闭症网瘾萝莉.ら 提交于 2020-03-08 12:05:01
原文: 高性能MySQL之事务 背景 当你手中抓住一件东西不放时,你只能拥有一件东西,如果你肯放手,你就有机会选择更多。与其在别人的生活里跑龙套,不如精彩做自己。人无所舍,必无所成。跌倒了,失去了,不要紧,爬起来继续风雨兼程,且歌且行。 一、概念 事务到底是什么东西呢?想必大家学习的时候也是对事务的概念很模糊的。接下来通过一个经典例子讲解事务。 银行在两个账户之间转账,从A账户转入B账户1000元,系统先减少A账户的1000元,然后再为B账号增加1000元。如果全部执行成功,数据库处于一致性;如果仅执行完A账户金额的修改,而没有增加B账户的金额,则数据库就处于不一致状态,这时就需要取消前面的操作。这过程中会有一系列的操作,比如余额查询,余额做加减法,更新余额等,这些操作必须保证是一个整体执行,要么全部成功,要么全部失败,不能让A账户钱扣了,但是中途某些操作失败了,导致B账户更新余额失败。这样用户就不乐意了,银行这不是坑我吗?因此简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。 接下来会以InnoDB为例,抽丝剥茧MySQL在事务支持方面的特定实现

MySQl的视图

杀马特。学长 韩版系。学妹 提交于 2020-03-07 19:41:16
视图的概念 1.视图是一种查看数据库中一个或多个表中数据的方法,是保存在数据库中的select查询。 2.视图是一种虚拟表,它的行和列来自查询中引用的表,在执行时,它直接显示来自表中的数据。 视图的操作 1.筛选表中的行。 2.防止未经许可的用户访问敏感数据。 3.将多个物理数据表,抽象为一个逻辑数据表。 视图的创建与查看 1.创建视图的格式: 2.删除视图 3.查看视图 举例: 视图的作用 1.提高了重用性,就像一个函数 2.对数据库重构,却不影响数据库的运行 3.提高了安全性能,可以对不同的用户 4.让数据更加清晰 视图的优点 安全,方便(让用户更容易获得、理解数据) 来源: CSDN 作者: eleven_77_ 链接: https://blog.csdn.net/eleven_77_/article/details/104718535

mysql(视图 事务 索引 外键)

流过昼夜 提交于 2020-03-07 13:06:19
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atomicity) 一致性(C,consistency) 隔离性(I,isolation) 持久性(D,durabulity) 原子性:事务内所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位 例如: A给B转账,不会因为各种原因A账号已经发生扣款而B账户没有收到加款。 一致性:事务开始和结束前后,数据库的完整性没有被破坏 案例: 对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元。 隔离性:事务之间不相互影响,多个事务并发访问时,事务之间是隔离的 事务查看数据更新时,数据所处状态要么是另一事务修改之前或者修改之后的状态,不会查看到中间状态的数据。事务1在修改表的时候提交之前事务2不能修改 持久性:事务完成一手

ACCP 结业考试

好久不见. 提交于 2020-03-07 07:47:25
1) 在 SQL Server 中,为数据库表建立索引能够(C )。 索引:是SQL SERVER编排数据的内部方法,是检索表中数据的直接通道 建立索引的作用:大大提高了数据库的检索速度,改善数据库性能 A. 防止非法的删除操作 B. 防止非法的插入操作 C. 提高查询性能 D. 节约数据库的磁盘空间 2) 在 SQL SERVER 中,创建一个表使用(C )语句。 A. INSERT 增加数据 B. DROP 删除数据库,表,约束,视图,索引,存储过程 C. CREATE 创建数据库,表,视图,索引,存储过程 D. ALERT 创建约束或者修改存储过程 3) 在 SQL SERVER 中,下面关于视图说法错误的是(C )。 A. 对查询执行的大多数操作也可以在视图上进行 B. 使用视图可以增加数据库的安全性 C. 不能利用视图增加,删除,修改数据库中的数据 为了保证数据库的安全,尽量不要利用视图进行增删改操作 D. 视图使用户更灵活的访问所需要的数据 4) 在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的( B )阶段。 A. 需求分析 B. 概要设计 C. 逻辑设计 D. 物理设计 5) 在SQL Server 数据库中,如果强制要求grades表中的学员必须是Students表中存在的学员,以下描述正确的是( A )。 A. 在

(数据库)14_视图

穿精又带淫゛_ 提交于 2020-03-07 07:02:09
14_视图 目 标 一、视图 二、为什么使用视图 三、简单视图和复杂视图 四、创建视图 五、查询视图 六、修改视图 七、创建复杂视图 八、视图中使用DML的规定 九、屏蔽 DML 操作 (将试图设置为只读试图) 十、删除视图 十一、Top-N 分析 总 结 目 标 通过本章学习,您将可以: 描述视图 创建和修改视图的定义,删除视图 从视图中查询数据 通过视图插入, 修改和删除数据 使用“Top-N” 分析 一、视图 从表中抽出的逻辑相关的数据的集合 视图是一种虚表。 视图建立在已有表的基础上 , 视图赖以建立的这些表称为 基表 。 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为 存储起来的 SELECT 语句 . 视图向用户提供基表数据的另一种表现形式 二、为什么使用视图 控制数据访问 简化查询 避免重复访问相同的数据 三、简单视图和复杂视图 四、创建视图 在 CREATE VIEW 语句中嵌入子查询 --创建一个简单试图 创建一个试图 :工资大于10000的雇员试图 create view v_emp as select * from emp where salary > 10000 ; --创建了试图之后 就可以通过试图来查询数据 select * from v_emp ; 子查询可以是复杂的 SELECT 语句 --创建一个试图 该视图包含 雇员编号 姓名