数据库事务问题

事务的 一致性

1.事务的一致性典型的问题体现是银行的转账问题

事务的一致性:内部一致性和外部一致性

1.外部的一致性:由外部的应用编码来实现,即银行的应用在进行转账的操作时,必须在同一事务内部调用对账户A和账户B的操作。如果在这个阶段出现错误,这不是数据库本身能解决的,也不属于我们要讨论的范围
2.数据库内部的一致性:在同一个事物内部的一组操作必须全部成功(或者全部失败)。这就是事物处理的原子性

事务的原子性

事务的原子性是保证数据的前提:为了实现事务的原子性,需要通过日志将所有对数据的操作写入日志,如果遇到事务中的一部分执行成功,另一部分由于突然断电,或者系统崩溃等问题,可以通过回溯日志的方式,撤销已经执行成功的操作,从而达到全部执行失败的效果

体现事务原子性和数据库一致性和持久性的常见场景

数据库崩溃后重启,此时数据库处于不一致的状态,此时数据库必须做crash recovery操作,大致步骤如下:

a、通过日志REDO(重演所有执行成功但是未写入到磁盘的操作)

b、再对到数据库崩溃前没有执行完成的事务进行UNDO(撤销所有执行了一部分,但是有一部份还没有执行完成,且尚未提交的操作,保证事务的原子性)

c、crash recovery结束后,数据库恢复了一致性,可以继续工作

多线程事务的问题
  1. 引入隔离性,既保证每一个事务看到的数据是一致的,确保一个事务在处理数据的同时,没有其他事务对自己正在处理的数据进行干扰,就好像其他事务都是不存在的一样,即事务在并发执行后的状态,和串行执行后的状态时一样的,实现隔离性主要通过加锁的方式。

  2. 锁的应用 :
    悲观锁 乐观锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值