Mysql事务问题

事务是什么?

事务是由一个有限的数据库操作序列构成,这些操作要么都执行要么都不执行。

为什么使用事务?

为了数据最终一致性

事务的特性

  1. 原子性:一个整体要么全部执行,要么全部不执行
  2. 一致性:事务开始前结束后数据不被破坏。AB转账最终总额不变
  3. 隔离性:多个事务并发执行时,相互隔离不干扰
  4. 持久性:事务提交后,事务所做的操作持久保留在数据库

脏读

一个事务读取另一个事务未提交修改过的数据

  • 假设现在A的余额是100,事务A正在准备查询Jay的余额
  • 事务B先扣减Jay的余额,扣了10,但是还没提交
  • 最后A读到的余额是90,即扣减后的余额

不可重复读

同一个事务前后多次读取数据结果不同

  • 事务A先查询Jay的余额,查到结果是100
  • 这时候事务B 对Jay的账户余额进行扣减,扣去10后,提交事务
  • 事务A再去查询Jay的账户余额发现变成了90

幻读

同一个事务前后查询数据记录结果不同

  • 事务A先查询id大于2的账户记录,得到记录id=2和id=3的两条记录
  • 这时候,事务B开启,插入一条id=4的记录,并且提交了
  • 事务A再去执行相同的查询,却得到了id=2,3,4的3条记录了。

隔离级别

读未提交:只限制不能同时修改一个数据
读已提交:只能读到别人提交的数据
可重复读:读取数据时不能修改
序列化:所有事物串行化执行

隔离级别 脏读 不可重复读 幻读
读未提交
读已提交 ×
可重复读 × ×
序列化 × × ×
posted on 2022-03-14 18:17  Margin丶  阅读(21)  评论(0)    收藏  举报