tnblog
首页
登录

事务简单理解

345人阅读 2019/6/12 9:52 总访问:24999 评论:0 手机 收藏
分类: sql

事务特性

  • 原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

  • 持久性:事务执行完成后 数据一直保持

  • 隔离性:同一时间只能一个事务操作一个数据。(衍生出隔离级别)

  • 一致性:事务在完成后,数据库的数据确定不会再回滚等

一致性由原子性、持久性、隔离性保证

原子性由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
2
3
4
5
select @@tx_isolation; /*查询当前会话事务隔离级别*/
select @@global.tx_isolation;/*查询系统事务隔离级别*/

set session transaction isolatin level repeatable read; /*设置当前会话隔离级别*/
set global transaction isolation level repeatable read; /*设置系统隔离级别*/

  • …….


评价
有个性,不需要签名