MySQL事务概念

ACID

  • 原子性(Atomicity): 事务被视为不可分割的最小工作单元,整个事务中的所有操作,要么全部执行,要么全部不执行。
  • 一致性(Consistency): 执行事务的前后,数据库总是从一个一致性状态换到另一个一致性状态。事务在执行过程中,如果中途出现了错误,因为事务还没有被提交,事务中间做的修改不会被保存,数据库的一致性状态没有被改变。当事务提交成功后,一致性状态换到另一个一致性状态。
  • 隔离性(Isolation): 一个事务所做的修改在提交之前,对其他事务是不可见的,各个事务之间的数据是独立的。
  • 持久性(Durability): 一个事务提交后,它对数据库的修改是持久化到磁盘的,即使系统崩溃,修改的数据也不会丢失。

隔离级别

并发事务可能导致的问题

  • 脏读: 一个事务在修改数据后还没有提交,此时另一个事务访问了这个数据,它读取到了这个修改还未提交的脏数据,称为脏读
  • 丢失修改: 在一个事务访问一个数据并进行修改后还没有提交,此时另一个事务也修改了这个数据,那么第一个事务内修改的结果就会被丢失。
  • 不可重复读: 指一个事务内多次访问同一数据,在第一次访问后,另一个事务访问了此数据并进行了修改,那么第二次访问时前后的结果不一致,(重点在于修改)称为不可重复读。
  • 幻读: 和不可重复读类似,在事务1第一次访问该范围记录后,另一个事务对此范围内数据进行了修改(增删),第二次访问时发现多了或者少了记录,就像幻觉一样,所以称为幻读。

四个隔离级别

  • READ_UNCOMMITTED(未提交读): 最低的隔离级别,允许读取尚未提交的数据,可能导致上述的所有问题,基本不用它。
  • READ_COMMITTED(提交读): 允许读取事务中已提交的事务,可以防止脏读,但是幻读和不可重复读仍然有可能发生。
  • REPEATABLE_READ(可重复读): 保证了同一个事务中多次读取的结果相同。可以防止脏读和不可重复读,但是幻读仍然有可能发生。
  • SERIALIZABLE(串行化): 最高的隔离级别,每个事务必须依次执行,可以防止上述的所有问题,但是会严重影响系统的性能,一般也不用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值