数据库的事务


事务

事务是数据库管理系统执行过程中一个不可分割的逻辑单位


1. 特性

1.1 原子性

对数据库的一系列操作,要么成功,要么失败

原子性主要是通过undo log日志来实现的,其记录了修改之前的值,一旦发生异常就通过undo log日志来实现回滚操作

1.2 一致性

数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态(比如转账前后数据的一致性),用户自定义完整性(比如钱的数据不能出现负数)

1.3 隔离性

多个事务之间的执行互不干扰

1.4 持久性

对数据库的增删改操作,只要事务提交了,那么结果就是永久性的

持久性是通过 redo log 和 double write 双写缓冲来实现的

2. 读取事务的问题(事务并发带来的三大问题)

2.1 脏读

事务A查询的数据在事务B(未提交)执行前后数据不一致

2.2 不可重复读

事务A查询的数据在事务B提交(已经提交)前后数据不一致

2.3 幻读

一个事务前后两次读取数据数据不一致,是由于其他事务插入数据造成的

2.4 幻读与不可重复读的区别

幻读是数据插入造成的,不可重复读是修改或者删除造成的

3、隔离级别

3.1 未提交读

一个事务可以读取别的事务没有提交的数据

3.2 已提交读

一个事务可以读取别的事务已经提交的数据

3.3 可重复读

一个事务里面多次读取数据都是一样的

3.4 串行化

所有的事务都是串行化执行的,需要排队等待其他事务完成

4、Innodb引擎

事务的隔离级别是可重复读,InnoDB解决了幻读问题,既保证数据的一致性,又支持较高的并发度

4.1 隔离级别的实现方案

4.1.1 基于锁的并发控制 (LBCC)

要保持事务前后读取的数据一致,可以锁住当前我们所操作的事务,不允许其他事务修改即可

4.1.2 MCVV(多版本的并发控制)

MVCC,是保存数据在某个时间点的快照读来实现的,利用undo-log日志实现
每个数据行都有一个隐藏的回滚指针,用于指向该行数据最后一次修改的历史版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值