1.事务的基本要素:
ACID
原子性(Automicity):事务开始后所有的操作要么全部做完,要么全部不做,出错回滚至事务开始前的状态。
一致性(Consistency):事务开始前后,数据库的完整性约束没有破坏。
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同事务之间没有任何干扰
持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚
2.事务并发的问题:
脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读到的数据是脏数据
不可重复读:事务A多次读取同一数据,事务B在事务A读取的过程中,对数据进行了更新并提交,导致事务A多次读取的数据不一致
幻读:事务A对数据库所有数据做更新,事务B新增一条数据,事务A执行结束后,发现还有一条未更新
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
3.快照读与当前读
可重复读的隔离级别使用MVCC机制select是快照读(历史版本,不加锁),insert update delete 是当前读(最新版本,特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。)