2021年7月14日 ACID和事务隔离机制
ACID和事务隔离机制
ACID
- 原子性(Atomicity) 要么成功要么失败
- 一致性(Consistency) 事务提交数据前后完整性一致
- 隔离性(Isolation) 多个用户访问数据库时 开启多个事务,个不干扰,多个事务之间要相互隔离
- 持久性(Durability) 事务提交 数据永久保存到数据库上
脏读
比如事务A对数据进行修改,当事务还没提交时事务 B访问到了A的数据并对数据进行操作 形成了脏读。
不可重复读
事务A读取数据张三的年龄是10岁 事务B对张三的年龄进行了修改为20 事务A再次读取时张三的年龄时20岁 (前后两次读取数据,读取两次数据不一致 正常逻辑来说 年龄是10岁)
幻读
事务A查询数据 数据结果时100 事务B新增数据100条 事务A再次查询数据时 发现数据是200条
(数据查多了 正常逻辑来说是100条数据)
事务隔离级别
读未提交(Read uncommitted)
字面意思 在这个事务隔离机制下 可以读取到未提交的数据 会造成脏读 ,不能解决 不可重复读 幻读
读已提交(Read committed)
这种事务隔离机制下 读取到的都是已提交数据 有效解决脏读 不可重复读
这是大多数 数据库 默认的事务隔离机制 比如 Oracle和SqL server数据库 但mysql不是
可重复读 (Repeatable read)
在这种事务隔离机制中 前后多次读取的内容是不可变的。 并且这个事务执行中 不允许其他事务进行update更新操作,但是允许进行insert (新增操作) 由此会造成某个事务读取数据不一致的情况产生幻读 —mysql默认事务隔离机制
可串行化(Serializable)
这种事务隔离机制下 所有事务执行都是按顺序的执行 从而解决事务 脏读 不可重复读 幻读。缺点就是会导致大量的操作超时和锁竞争,从而大大降低数据库的性能,一般不使用这样事务隔离级别。
注意:mysql 在Innodb上解决了幻读问题

浙公网安备 33010602011771号