事务四大特性
- 原子性
事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 - 一致性
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。 - 隔离性
一个事物所做的修改在最终提交以前,对其他事务是不可见的。 - 持久性
一旦事务提交,则其所作的修改将会永远保存到数据库中,就算系统发生崩溃,事务执行的结果也不能丢失。
并发一致性问题
- 脏读
一个事务读取另外一个事务还没有提交的数据,这种情况叫做脏读。 - 不可重复读
在一个事务中前后两次读取的结果不一致,到哦值了不可重复读。 - 幻读
在两个连续的查询之间一个并发的事务修改了查询的数据集,导致这两个查询返回了不同的结果。
事务的隔离(解决并发一致性问题)
- 未提交读
事务中的修改,即使没有提交,对其他事务也是可见的。 - 已提交都读
一个事物只能读取已经提交的事务所作的修改。 - 可重复读
保证在同一个事物中多次读取同样数据的结果是一样的。MYSQL默认的隔离级别 - 可串行化
强制事务串行执行。需要加锁实现,而其他隔离级别通常不需要。
多版本并发控制
多版本并发控制(MVCC)是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式,
用于实现已提交读和可重复读这两种隔离级别
- 版本号
- 系统版本号:是一个递增的数字,每次开始一个新的事务,系统版本号就会自动递增。
- 事务版本号:事务开始时的系统版本号。
- 快照读
使用MVCC读取的是快照中的数据,这样可以减少加锁所带来的开销。 - 当前读
使用MVCC读取的是快照中的数据,这样可以减少加锁所带来的开销。
范式
- 第一范式
所有字段值都是不可分解的原子值 - 第二范式
确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关。 - 第三范式
每一列数据都和主键直接相关,而不能间接相关。
评论区