关于数据库事物的一些观念

最近面试老是碰到事物的问题,不能很好的回答,特收集整理了相关概念:

概念:数据库事物(database transaction)是指 作为单个逻辑工作单元执行的一些列操作,要么完整地执行,要么完全地不执行。 即将一组相关的操作组合为要么全部成功要么全部失败的单元,这样可以简化错误回复并使应用程序更可靠。

条件属性:一个逻辑单元要想成为事物必须满足ACID(原子性,一致性,隔离性,持久性)属性

原子性(atomic):与事物想关联的操作要么全部执行,要么全部不执行

一致性(consistency):事物执行之前和之后数据库必须处于一致性状态(数据库的状态满足所有的完整性约束:,就说该数据库是一致性的)

隔离性(isolation):并发事物是相互隔离的,即一个事物内部的操作及正进行操作的数据必须封锁起来,不被企图修改的事物看到,即其他事物不会查看中间 状态的数据。DBMS通过加锁在并发事物间提供不同级别的隔离。

持久性(duration):事物完成后,它对系统的影响是永久的,即使系统出现致命故障也将保持;持久性意味着当系统或介质发生故障时,确保已提交的事物更新不能 丢失,持久性通过数据库备份和恢复来保证。


再说一点数据库的一致性的概念(摘自百科):数据库一致性是指事物执行的结果必须是使数据库从一个一致性状态变成另一个一致性状态。

保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。
保证数据库的一致性是数据库管理系统的一项功能.比如有两个表(员工\职位),员工表中有员工代码、姓名、职位代码等属性,职位表中有职位代码、职位名称、职位等级等属性。你在其中员工表中进行了插入操作,你插入了一个新员工的信息,而这个新员工的职位是公司新创建的一个职位。如果没有一致性的保证,就会出现有这么一个员工,但是不知道他到底担当什么职责!这个只是它的一个小小方面。
读一致性也是数据库一致性的一个重要方面,在实际中,我们会遇到这种情况:我们对一个表中的某些数据进行了更新操作,,但是还没有进行提交,这时另外一个用户读取表中数据.这个时候就出现了读一致性的问题:到底是读什么时候的数据呢?是更新前的还是更新后的?在DBMS中设有临时表,它用来保存修改前的值,在没有进行提交前读取数据,会读取临时表中的数据,这样一来就保证了数据是一致的.(当前用户看到的是更新后的值)
但是还有一种情况:用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的临时表来存放修改前的数值,,以保证user2读取的数据是修改前的一致数据.然后下次再读取时候就是更新后的数据了.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值