事务、事务隔离级别、三读问题 一、事务 事务定义:一组数据操作要么全成功,要么全失败。 事务四大特性:ACID 原子性 :要么全成功,要么全失败。 一致性 :事务执行的结果必须
事务定义:一组数据操作要么全成功,要么全失败。
事务四大特性:ACID
原子性:要么全成功,要么全失败。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
隔离性:事务的执行互不影响
持久性:提交完毕的事务不可回滚
未提交读:可读到其他事务未提交的数据 (可能出现:脏读、不可重复读、幻读)
提交读:只能读到其他事务已提交的数据 (可能出现:不可重复读、幻读)
可重复读(MySQL默认):同一事务中的两次查询一致,不会读到其他事务对已有数据的修改。 (可能出现:幻读, InnoDB引擎通过多版本并发控制(MVCC)机制解决了幻读问题)
串行读:将事务的执行变为顺序执行,后一个事务必须等待前一个事务执行结束。
以下几个概念是事务隔离级别要实际解决的问题:
脏读:读到了由于事务回滚或其他操作导致没有最终存在的数据。
不可重复读:针对更新数据。同一事务中的两次查询数据不一致。事务A的两次查询过程中插入了事务B提交的更新了原有的数据,导致事务A的两次查询不一致。
幻读:针对插入数据。事务A对某些数据作了更改还未提交时,事务B提交了插入事务A更改前相同的数据,而这时事务A的查询会误以为刚刚的更改未生效。