ACID
- 原子性(A):事务必须是一个原子的操作,事务中包含的各项操作在一次执行过程中,要么都发生,要么都不发生
- 一致性©:一个事务在执行之前和执行之后,数据库都必须处以一致性状态
- 隔离性(I):在并发场景中,每个事务之间是互相隔离、互相独立的,一个事务的执行不能被其它事务干扰
- 持久性(D):事务一旦提交后,数据库中的数据必须被永久的保存下来
事务隔离产生的问题
事务隔离级别
未提交读(RU:read uncommintted)
- 事务中的修改操作,即使是没有提交,对其他事务也是可见的
- 脏读:事务B读到了事务A未提交的数据
已提交读/不可重复读(RC: read committed)
- 一个事务从开始到提交之前,所做的所有的修改操作对其他事务都是不可见的。
- 也可叫做不可重复读,即:事务A在执行过程中读取到了事务B提交的数据,即:事务A中两次相同的查询操作,返回的结果不一致。
可重复读
- 保证事务在执行过程中的多次相同操作的读取结果都是一致的
- MySQL的默认隔离级别
- 会有幻读的问题;幻读:事务A对表中某个范围内数据进行修改,事务B在该范围内新增数据,当事务A再次读取该范围内的记录时,会产生幻行
可串行化
- 对事务影响到的行都进行加锁,强制串行执行
隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|
未提交读 | √ | √ | √ | × |
已提交读 | × | √ | √ | × |
可重复读 | × | × | √ | × |
可串行化 | × | × | × | √ |