数据库事务

事务:要么统一完成,要么都不完成

[color=red]ACID即:事务的原子性、一致性、独立性及持久性[/color]

事务的原子性是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.

事务的一致性是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.

事务的独立性是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.

事务的持久性是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的回滚.


[color=red]事务并发可能出现的问题:[/color]
第一类丢失更新(Lost Update)(不支持事务的DB)
时间 取款事务A 存款事务B
T1 开始事务
T2 开始事务
T3 查询账户余额为1000元
T4 查询账户余额为1000元
T5 汇入100元把余额改为1100元
T6 提交事务
T7 取出100元把余额改为900 元
T8 撤销事务
T9 余额恢复为1000元(丢失更新)

dirty read脏读(读到了另一个事务在处理中还未提交的数据)
时间 取款事务A 存款事务B
T1 开始事务
T2 开始事务
T3 查询账户余额为1000元
T4 汇入100元把余额改为1100元
T5 查询账户余额为1100元(读取脏数据)
T6 回滚
T7 取款1100
T8 提交事务失败

non-repeatable read 不可重复读
时间 取款事务A 存款事务B
T1 开始事务
T2 开始事务
T3 查询账户余额为1000元
T5 汇入100元把余额改为1100元
T5 提交事务
T6 查询帐户余额为1100元
T8 提交事务

second lost update problem 第二类丢失更新(不可重复读的特殊情况)
时间 取款事务A 存款事务B
T1 开始事务
T2 开始事务
T3 查询账户余额为1000元
T4 查询账户余额为1000元
T5 取出100元把余额改为900元
T6 提交事务
T7 汇入100元
T8 提交事务
T9 把余额改为1100元(丢失更新)

phantom read 幻读
时间 查询学生事务A 插入新学生事务B
T1 开始事务
T2 开始事务
T3 查询学生为10人
T4 插入1个学生
T5 查询学生为11人
T6 提交事务
T7 提交事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值