博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《数据库系统概念》5-连接、视图和事务
阅读量:6716 次
发布时间:2019-06-25

本文共 1583 字,大约阅读时间需要 5 分钟。

hot3.png

一、连接

a)inner join中,on,可以用where替代,但用on来专门指定join条件,其它条件写在where中可读性更好。
b)outer join
对于连接字段为空的元祖,使用inner join时不会列出,outer join却不一样,left /right join会保留左(右)侧的连接字段为空的元祖。left join的过程可以理解为先执行inner join,然后再向结果集中添加左侧关系中剩余的元祖。
在outer join中,on和where就不能互换了
c)在SQL server中left outer join也是可以写的,但一般会省略inner、outer
二、视图
a)前面学习过程中接触的表都是在数据库中实际存在的,但有时用户并不需要一张表的全部信息;甚至有时候不想让用户拿到额外的信息,比如有时只允许用户查阅instructor表的id, name;或者有一些复杂的查询我们不希望每次都去重复写一遍。这时可以使用虚拟的表(virtual relation),即视图(view),视图不属于数据库的表,但可以被用户访问到。
b)视图的定义
写法为create view v as <query expression>;其中query expression可以是任何查询语句。比如之前的instructor视图可以这样定义:
create view faculty as
select ID, name
from instructor;
然后只为用户提供访问faculty视图的权限,就可以达成目的。
c)视图被定义后,就可以像真实的表一样被使用,视图还可以嵌套视图。在使用到视图的时候,数据库会执行视图的定义语句来生成结果集,所以视图的内容是实时的。
d) 物化视图(Materialized Views)
视图一般在被使用时才会实时查询出结果,这种方式虽然能保证数据是最新的,但开销却较大,在一些对计算资源有限制的场合、或者视图被频繁使用的时候、以及对查询速度有要求时,需要视图结果集能被保存起来,这种视图称为物化视图。
e)视图的更新
视图可以为查询带来方便,但视图的更新却涉及到多个问题,造成这些问题的根源是对视图的更改需要反映到真实表上。由于允许视图出现在真实表可以出现的任意位置,所以对于之前的faculty视图,就可以插入数据:
insert into faculty values (30765, ‘Green’);
但instructor.salary只能插入null了,instructor.salary如果规定不允许为空,则操作会因违反一致性而被阻止。此外再考虑视图关联多张表、视图的嵌套等情况,会使得问题变得非常复杂,所以通常对视图的更新是不被允许的。
三、事务
a)SQL标准规定了事务形式为:包含查询、更新语句,必须用commit work或rollback work来结束且”work”可省略。
b)如果SQL语句可能出错,则可以包含在事务中,commit类似于保存编辑好的文档,而rollback相当于撤销对文档所做的修改。但是事务一旦被commit,就无法再被rollback。事务是原子性的,事务包含的操作要么全部成功,要么全部失败。如果在SQL语句执行过程中发生系统奔溃、断电等事故,只要没有执行过commit,则在系统重启后会首先回滚。
c)在许多数据库产品中,默认每条单独的SQL就是一个事务,执行结束后自动commit。
学习资料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan
 

转载于:https://my.oschina.net/u/2327858/blog/1579586

你可能感兴趣的文章
css3新增属性:多列(column)
查看>>
redis 主从配置和集群配置
查看>>
手机3D游戏开发:自定义Joystick的相关设置和脚本源码
查看>>
window.frames["detailFrm"].isSubmitting = true;//?起什么作用
查看>>
ASCII表
查看>>
idea之debug
查看>>
什么是真正的流程管理?流程管理的是与不是。
查看>>
洛谷P1613 跑路
查看>>
python各种模块,迭代器,生成器
查看>>
微信小程序 watch监听数据变化 类似vue中的watch
查看>>
服务器端推送技术
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
修改SQL Server 的排序规则
查看>>
Windows 8部署系列PART2:部署先决条件准备
查看>>
微软私有云分享(R2)18Windows Azure Pack 命令行安装
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
查看>>
DB2 应用
查看>>
第十六章 为什么说张清“虎头蛇尾”
查看>>
ShiftOperators.cs
查看>>
C#中的预处理命令
查看>>