数据库相关概念
视图
视图是一种虚拟的表,它通过sql语句作用到一个或多个数据库真实表上,返回筛选后的数据。
视图返回的数据只能查看不能更改;
视图可以使用户只看到他们关注的那几列数据(可能来自一个或多个表);
视图可以重用查询操作,比如一个比较复杂的查询语句经常被使用,那么可以将该查询封装为视图,然后每次只需要通过该视图查看即可;
视图背后的sql语句仍会被实行,因此视图并不会提高查询的速度
数据库完整性约束
数据库完整性是为了保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。它包括域完整性、实体完整性、参照完整性、用户定义完整性。域完整性、实体完整性、参照完整性是关系模型必须满足的完整性约束条件。
域完整性 是指属性的取值必须满足要求,即为给定域中的值。
实体完整性是指关系的主关键字不能重复也不能为空值。
参照完整性是定义建立关系之间联系的主关键字与外部关键字引用的约束关系。 关系数据库中通常包括多个存在相互联系的关系,关系与关系之间的联系是通过公共属性来实现的,所谓公共属性,它是一个关系R(称为被参照关系或目标关系)的主关键字,同时又是另一关系K(称为参照关系)的外部关键字。如果参照关系K中外部关键字的取值,要么与被参照关系R中某元组主关键字的值相同,要么取空值,那么,在这两个关系间建立关联的主关键字和外部关键字引用,符合参照完整性约束要求。如果参照关系K的外部关键字也是其主关键字,根据实体完整性要求,主关键字不得为空,因此参照关系K的外部关键字的取值实际上只能去相应被参照关系R中已经存在的主关键字。
用户定义完整性是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。这一约束机制议案不由应用程序提供,而应由关系模型提供定义并检验,用户定义完整性主要包括字段有效性约束和记录有效性。
事务ACID
事务是访问并可能更新各种数据项的一个程序执行单元。它具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)等性质。
设事务Ti 是从账户A中过户50元到账户B,事务Ti可以细分为如下步骤:
read(A);
A = A-50;
write(A);
read(B);
B = B + 50;
write(B);
则该事务必须要满足如下性质:
原子性(Atomicity) 是指一个事务的各个步骤要么全部成功完成,要么全部不完成。在事务Ti中,如果在执行完write(A)之后,write(B)之前系统故障导致数据库系统重启,那么事务Ti会回退到没有发生时的状态,即A账户中钱减少50,B账户中钱增加50,要么都发生,要么都不发生。数据库中事务管理部件确保事务的原子性。
一致性(Consistency)
是指数据库的状态在事务发生前后都要符合描述的现实世界的真实状态。比如,账户A和B中本来分别有1000和2000元,A+B=3000, 那么在事务Ti发生前后都要满足A+B=3000 这个现实世界的真实状态。
隔离性(Isolation)
是指有多个事务同时发生时,对某个事务Ti来说,仿佛不存在其他事务一样。即要保证多个事务发生时,每个事务都要满足原子性、一致性、持久性。确保隔离性的是数据库系统中并发控制部件。
持久性(Durability)
是指一旦事务成功完成,该事务对数据库施加的所有更新就都是永久的,即使事务执行完成后发生系统故障。数据库通过恢复管理部件来实现持久性。
事务状态
事务的状态主要分为以下几种:
(1)活动状态:初始状态,事务执行时处于这个状态
(2)部分提交状态:最后一条语句被执行后
(3)失败状态:发现正常的执行不能继续后
(4)中止状态:事务回滚并且数据库已被恢复到事务开始执行前的状态后
(5)提交状态:成功完成后
数据库的事务状态如下图所示:
事务从活动状态开始,当事务完成它的最后一条语句后进入了部分提交状态,此刻事务已经完成执行,但由于实际输出可能仍临时驻留在内存中,而其成功完成前可能出现硬件故障,因此事务仍有可能不得不中止。
接着数据库系统往磁盘上写入足够的信息,确保即使出现故障时事务所做的更新也能在系统重启后重新创建。当最后一条这样的信息被写完后,事务就进入了提交状态。(我们假设故障不会引起磁盘数据丢失)。
系统判定事务不能继续正常执行后(如由于硬件故障或逻辑错误),事务进入失败状态。这种事务必须回滚,这样事务进入中止状态。此刻,系统由两种选择:
(1)重启事务:仅当引起事务中止的软硬件错误不是由事务的内部逻辑所产生时,重启事务被视为一个新事务。
(2)杀死事务:这样做通常是由于事务的内部逻辑造成的错误,只有重写应用程序才能改正,或者因为输入错误,或者因为所需数据在数据库中没有找到。