MySQL 事务原理

事务定义:事务是由一组SQL语句组成的逻辑处理单元。

事务的属性
  • 原子性(Atomicity) :当前事务的操作要么同时成功,要么同时失败。原子性由 undo log 日志来实现。
  • 一致性(Consistent) :使用事务的最终的目的,由其他 3 个特性及业务代码正确逻辑来实现。
  • 隔离性(Isolation) :在事务并发执行时,多个事务的操作不能互相干扰。隔离性由 MySQL 的各种锁及 MVCC 机制来实现。
  • 持久性(Durable) :提交事务之后,事务对数据库的改变就应该是永久性的。永久性由 redo log 日志来实现。
并发事务带来的问题
  • 更新丢失或脏写:事务 A 的更新覆盖了事务 B 的更新。例如事务 A 读取一条数据,其中价格这个字段的值为100,在 java 程序中手动加了 50,即把 150 这个值更新回了数据库,但是在读取数据之后,更新之前,事务 B 已经把这个字段的值更新为 200,事务 A 更新的之后就覆盖了事务 B 的更新。
  • 脏读:事务 A 读到了事务 B 还未提交的数据。
  • 不可重复读:在同一个事务中,不同时刻,相同查询语句查询结果不一致。
  • 幻读:事务 A 读取到了事务 B 提交的新增数据。例如在可重复读隔离级别下,事务 A 先进行查询,事务 B 这时新增了一条数据,这时事务 A 可以执行更新这条数据的操作,更新之后再次查询就可以查询到这条数据了。
事务隔离级别
隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
读未提交(Read uncommitted)可能可能可能
读已提交(Read committed)不可能可能可能
可重复读(Repeatable read)不可能不可能可能
可串行化(Serializable)不可能不可能不可能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值