mysql的事务特性
ACID
A: 原子性(Atomicity)
C: 一致性(Consistency)
I: 隔离性(Isolation)
D: 持久性(Durability)
mysql的事务隔离级别
(不可重复读):不是不能重复读,是指前后两次读取的结果不一样
读未提交:最低的隔离级别,一个事务读取另一个事务尚未提交的修改
读已提交:一个事务只能读取另一个事务已经提交的修改(oracle默认级别) 持有行级排他锁,避免脏读脏写
可重复读:MySQL InnoDB存储引擎的默认隔离级别。 保证在同一个事务中,多次读取同一范围的数据,结果总是一致的(像事务开始时的一个快照)。它解决了不可重复读问题。
mysql默认--->怎么解决幻读:(当前读:“当前读” 就是数据库要 “动手改东西” 或者 “先占住位置不让别人动” 的时候,它必须睁大眼睛看清楚东西现在最新的、真实的样子,并且马上把它锁起来! 它看的不是老照片,是实时监控!)
①间隙锁 /临键锁 :解决当前读的幻读,当前读取必须做用于实时的数据,通过物理性的阻止其他事务在查询涉及的范围插入新行 通过mvcc找到对应的最新数据行,通过间隙锁 /临键锁范围加锁,确保不会产生幻读
②MVCC(多版本并发控制)就相当于生成一个历史快照(后去的读操作是针对的历史快照),其他变化与你无关 针对的基础读取(select)
串行化: 最高的隔离级别。它强制所有事务串行执行(一个接一个地执行),完全牺牲并发性