1.事务的特性(ACID)
- A(Atomicity)原子性:在一个事务中的操作要么都成功要么都失败。
- C(Consistency)连续性:
- I(Isolation)隔离性:一个事务不能被另一个事务所影响。
- D(Durability)持久性:一个事务被提交之后对数据库的改变是永久性的。
2.事务的隔离级别

-
读未提交(Read uncommitted)
读未提交
- 事务1和事务2同时开始,事务2能读取到事务1未提交之前的数据,如果事务1执行失败回滚,那事务2读取到的就是脏数据
-
读已提交(Read commited)
读已提交
- 事务2只能读取到事务1提交的数据,解决了脏读问题。
- 事务1和事务2同时开始,事务2查询了数据,事务1对数据进行
修改(删除)
之后,事务2再次查询数据,两次结果不一致,这就是不可重复读
-
可重复读(Repeatable Read)
可重复读
- 事务2和事务1同时开始,事务2在事务1
更新/删除
数据并提交之后,读取到的数据是一致的,解决了不可重复读- 事务1和事务2同时开始,事务1首先查找所有数量为30的商品,事务2再此之后插入一条数量为30的商品,事务1再次查找数量为30的商品,两次查询结果不一致。这就是幻读。
-
串行化(Serializable)
串行化
- 事务1和事务2同时启动,事务1查找数量为30的商品,之后事务2
插入/删除
一条数量为30的商品,但是被阻塞了,事务1再次查找数量为30的商品,并提交事务。事务2才继续执行,解决了幻读问题。
总结
从以上案例看来,数据库事务解决了几个问题
- 脏读:一个事务可以读取到另一个事务尚未提交的数据,如果该数据回滚,那么读取的数据就没有意义。
- 不可重复读:一个事务在执行期间多次查询
同一条数据
,但是查询结果不一致。 - 幻读:一个事务在执行期间查询
多条数据
,但是查询结果不一致。
网友评论