deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • 数据库
  • Redis
  • NewSQL
  • Mysql

    • Mysql
    • 缓存池
    • Innodb
    • 数据库事务
    • Mysql

数据库事务

数据库事务的 4 个特性:

  • 原子性:事务中的操作要么不做,要么全做
  • 一致性:事务从一个正确的状态可以迁移到另一个正常的状态
  • 隔离性:事务之间不互相影响
  • 持久性:事务提交后可以持久化存储

事务的目的是为了保障一致性,原子性,隔离性,持久性都是为了一致性服务的

隔离性是指事务不互相影响。

影响大体分为以下几种

  • 脏读:一个事务中读到另一个事务中未提交的数据
  • 不可重复读: 同一事务中多次执行相同的 select, 数据改变(因为其他事务进行了 update 并提交)
  • 幻读: 同一事务多次进行 select, 数据条目增加(因为其他事务进行了 insert 并提交)
  • 可重复读: 同一事务,多次 select 也不会改变数据

为了解决上边的问题,引入了四种隔离性:

  • READ UNCOMMITTED 读未提交: 可以读取为提交的数据,即可以脏读,幻读,不可重复读
  • READ COMMITTED(RC) 读已提交: 只能读取已经提交的数据,不可以脏读,可以幻读和不可重复读
  • REPEATABLE READ(RR) 可重复读: 同一事务中多次 select,数据也不会被修改,允许幻读,不允许脏读,不可重复读
  • SERIALIZABLE: 串行化,不允许幻读,脏读,不可重复读

Prev
Innodb
Next
Mysql