《数据库系统概念》5-链接、视图和事务

1、链接
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

2、视图
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若是规定不容许为空,则操做会因违反一致性而被阻止。此外再考虑视图关联多张表、视图的嵌套等状况,会使得问题变得很是复杂,因此一般对视图的更新是不被容许的。

3、事务
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

 数据库

相关文章
相关标签/搜索