Mysql并发控制-事务
事务的特性ACID
- A: atomiciy 原子性
一个事务必须保证其中的操作要么全部执行,要么全部回滚。 - C: consistency 一致性
数据必须保证从一种一致性的状态转换为另一种一致性状态。 - I:isolation 隔离性
当一个事务未执行完成时,通常会保证其他session无法看到这个事务的执行结果。 - D:druability 持久性
事务一旦commit,则数据会保存下来,即使提交后系统崩溃,数据也不会丢失。
事务的隔离级别
- READ UNCOMMITTED(读未提交,可脏读)
事务中的修改,即使没有提交,其他会话也能读到-出现脏读。 - READ COMMITTED(读已提交,可幻读)
保证了一个事务如果没有commit,事务中的操作对其他会话是不可见的。
解决了脏读的问题,但是会对其他session产生两次不一致的读取结果-出现幻读。 - REPEATABLE READ (可重复读)
一个事务中多次执行同一读sql,返回结果是一样的,解决了幻读和脏读问题。
InnoDB使用间隙锁对当前读进行加锁,锁住行以及可能产生幻读得插入位置,阻止新的数据插入产生幻读行。 - SERIALIZABLE(可串行化)
最强的隔离级别,通过给事务中酶促读取的行加锁,写加写锁,保证不产生幻读问题,但是会导致大量超时以及锁竞争问题。
网友评论