MySQL事务的四大特性与隔离级别

文章目录

  • 什么是事务?
  • 事务的四大特性
  • 为什么要设置事务的隔离级别?
  • MySQL事务隔离级别

什么是事务?

事务指一组操作是不可分割的最小单位,组成这组操作的各个单元,要么全部执行成功,要么全部执行失败

事务的四大特性

  • 原子性: 一个事务的所有操作要么全部执行成功,要么全部执行失败,不会结束在中间某个环节,中间若发生错误,会回滚到事务开启前的状态
  • 一致性: 事务的执行前后,数据库的完整性没有被破坏,也就是数据库中的数据都得是合理的
  • 隔离性: 防止多个事务并发执行时由于事务交叉执行而导致数据的不一致
  • 持久性: 事务一旦提交,对数据的修改是永久的,数据就保存在硬盘中了

为什么要设置事务的隔离级别?

设置事务的隔离级别是为了保证多个事务并发执行的结果是可控的,更符合预期的,也就是防止别的事务影响到当前事务的一种策略

事务并发执行可能带来的结果:

丢失更新: 当一个事务修改了某个操作后,另一个事务对此值也进行了修改,那前一个事务读的值就不是它自己修改的值
MySQL事务的四大特性与隔离级别_第1张图片
脏读: 一个事务读到了另一个事务未提交的数据
MySQL事务的四大特性与隔离级别_第2张图片
不可重复读: 一个事务两次查询的结果不同,因为有别的事务在这中间对数据进行了修改
MySQL事务的四大特性与隔离级别_第3张图片
幻读: 一个事务连续读取两次,中间有别的事务执行了插入数据
MySQL事务的四大特性与隔离级别_第4张图片

幻读与不可重复读的区别:

幻读侧重的是插入操作导致读取的结果集不同,不可重复读侧重的是修改操作导致读取的值不同

MySQL事务隔离级别

  • 读未提交(READ UNCOMMITTED): 当前事务可以看到别的事务中未提交的数据
  • 读已提交(READ COMMITTED): 当前事务只能读取到别的事务已经提交的数据,解决了脏读
  • 可重复读(REPEATABLE READ): MySQL默认的事务隔离级别,保证当前事务多次读取的数据是一致的,解决了脏读和不可重复读
  • 串行化(SERIALIZABLE): 强制事务串行执行,也就是让事务按照顺序执行,保证多个事务互不干扰,解决了所有问题,但是效率低

你可能感兴趣的:(MySQL,mysql,数据库,java)