数据库事务相关知识

事务特性:

  1. 原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;
  2. 一致性:事务执行前和执行后必须处于一致性状态;
  3. 隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
  4. 持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作。

事务隔离级别:

  • Read uncommitted(读未提交):最低级别,任何情况都会发生。
  • Read Committed(读已提交):可避免脏读的发生。
  • Repeatable Read(可重复读):可避免脏读、不可重复读的发生。
  • Serializable(串行化):避免脏读、不可重复读,幻读的发生。

事务级别带来的一些问题

脏读:(针对未提交的数据)一个事务在更新一条记录,未提交前,第二个事务读到了第一个事务更新后的记录,那么第二个事务就读到了脏数据,会产生对第一个未提交数据的依赖。一旦第一个事务回滚,那么第二个事务读到的数据,将是错误的脏数据。

不可重复读:(读取数据本身的对比)一个事务在读取某些数据后的一段时间后,再次读取这个数据,发现其读取出来的数据内容已经发生了改变,就是不可重复读。

幻读:(读取结果集条数的对比)一个事务按相同的查询条件查询之前检索过的数据,确发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

PS:在mysql5.7下试验,默认级别为Repeatable read,该级别把上面三个问题都解决了,其中幻读主要采用mvcc多版本并发控制。

猜你喜欢

转载自blog.csdn.net/seasonLai/article/details/82836270