数据库事务基础

1.事务的特性(ACID)

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

2.事务的隔离级别

商品表
  1. 读未提交(Read uncommitted)


    读未提交
  • 事务1和事务2同时开始,事务2能读取到事务1未提交之前的数据,如果事务1执行失败回滚,那事务2读取到的就是脏数据
  1. 读已提交(Read commited)


    读已提交
  • 事务2只能读取到事务1提交的数据,解决了脏读问题。
  • 事务1和事务2同时开始,事务2查询了数据,事务1对数据进行修改(删除)之后,事务2再次查询数据,两次结果不一致,这就是不可重复读
  1. 可重复读(Repeatable Read)


    可重复读
  • 事务2和事务1同时开始,事务2在事务1更新/删除数据并提交之后,读取到的数据是一致的,解决了不可重复读
  • 事务1和事务2同时开始,事务1首先查找所有数量为30的商品,事务2再此之后插入一条数量为30的商品,事务1再次查找数量为30的商品,两次查询结果不一致。这就是幻读
  1. 串行化(Serializable)


    串行化
  • 事务1和事务2同时启动,事务1查找数量为30的商品,之后事务2插入/删除一条数量为30的商品,但是被阻塞了,事务1再次查找数量为30的商品,并提交事务。事务2才继续执行,解决了幻读问题。

总结

从以上案例看来,数据库事务解决了几个问题

  1. 脏读:一个事务可以读取到另一个事务尚未提交的数据,如果该数据回滚,那么读取的数据就没有意义。
  2. 不可重复读:一个事务在执行期间多次查询同一条数据,但是查询结果不一致。
  3. 幻读:一个事务在执行期间查询多条数据,但是查询结果不一致。

你可能感兴趣的:(数据库事务基础)