事务

ACID:

  • A:原子性
    • 事务内多次更改,要么全部成功,要么全部失败回滚,不允许中间态
  • C:一致性
  • I :隔离性
    • 数据库的并发处理事务,需要彼此隔离
      • 读未提交
        • 脏读
        • 不可重复读
        • 幻读
          • 事务内可以读到其他事务未提交的数据,这个数据一旦发生回滚即是脏数据
      • 读已提交
        • 不可重复读
          • 事务内多次读取数据会因为其他事务的提交而产生改变
        • 幻读
      • 可重复读
        • 幻读
          • 事务内多次读取数据不会因为其他事务的提交而改变,但是事务结束后会发现事务内读取的数据因为其他事务的更改而失效
      • 串行化
        • 并发性能低,利用排他锁,强制资源锁定
  • D:持久性
    • 事务结束后,数据即被保存,不会发生回滚

mysql默认隔离级别

可重复读

  • 看起来只有这个可以上手正常用的样子

这四个隔离级别是用来解决什么问题的

读未提及:最低等级,高并发性能带来一堆问题

读已提交:解决了脏读

可重复读:解决了不可重复读

串行化:全解决了,性能低

读数据一致性及并发副作用 隔离级别读数据一致性脏读不可重复读幻读
为提交读(read uncommitted)最低级别,不读物理上顺坏的数据
已提交读(read committed)语句级
可重复读(Repeatable red)事务级
可序列化(Serializable)最高级别,事务级