事务简单理解
电脑版发表于:2019/6/12 9:52
事务特性
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
持久性:事务执行完成后 数据一直保持
隔离性:同一时间只能一个事务操作一个数据。(衍生出隔离级别)
一致性:事务在完成后,数据库的数据确定不会再回滚等
一致性由原子性、持久性、隔离性保证
原子性由Undo Log保证
Undo log:保存每次变更前的记录,用来恢复数据,回滚什么的
持久性由Redo Log保证
Redo Log:事务commit前,都会将记录保存到Redo log中,保存成功后才会允许commit,如果commit前断电之类不可抗力 可以通过redo log恢复
隔离性:↓
事务隔离级别
Read Uncommitted(读取未提交内容):基本没啥用 什么都不能限制
Read Committed(读取提交内容):大部分数据库的默认级别,只能看到已提交的改变(避免脏读)
Repeatable Read(可重复读):mysql的默认级别,同一事务并发时 保证读取数据行一样(避免脏读与重复读)
Serializable(串行化):最高级别 但是性能差,锁竞争(避免脏读、重复读、幻读)
脏读:读取到事务未提交的数据(A读取到B未提交的数据,B回滚,那么A的数据就是脏数据)
幻读:事务进行中读取到其他已提交的数据(A更新后,B操作数据库插入什么的,导致A发现仍有数据未更新)
不可重复读:事务进行时提交前后读取到的数据不一致(A事务未提交时,其他数据先提交)
1 | select @@tx_isolation; /*查询当前会话事务隔离级别*/ |
锁
…….