【mysql——事务理解】

如何理解事务
一、事务是干啥的

  • 事务指逻辑上的一组操作,组成这组操作的各个单元,事务最核心的就是原子性,要么全部成功,要么全部失败(不是说真的没执行,而是执行一半如果出现问题,能够自动恢复如初)。事务就能保证,在执行过程中出现问题的时候,自动的把前面的SQL执行的效果,进行还原,恢复如初~~(回滚roolback)

二、事务的其他特性还有啥

  1. 原子性:事务的根本所在(事物存在的意义),能够把多个SQL打包成一个整体,要么都执行完,要么一个都不执行(如果执行过程中出错,则自动回滚)
  2. 一致性:事务执行前后,数据处在“一致”的状态(数据能对的上,合情合理)
  3. 持久性:事务进行的改动,都是写到硬盘里的,不会随着程序的重启/主机重启而丢失
  4. 隔离性:多个事务,并发执行的时候,事物之间能偶保持“隔离”,不相互干扰

三、在并发执行事务下会有哪些问题,以及如何解决(重点隔离性)

  1. 脏读:一个事务A在修改数据,提交之前,另一个事务B读取了数据,此时A极有可能在提交的时候提交的是不同数据(后续又修改了),此时事务B读到的数据就是“无效的数据”,就称为脏读,读取脏数据。

    ⭐如何解决:在提交之前不能读,提交之后才能读。相当于是对写操作加锁。(并发现降低(效率降低),隔离性提高(准确性提高))

  2. 不可重复读:在一个事务A中,多次读取同一个数据,发现不一样!!(读的过程中被人修改了)

    ⭐如何解决:使用读加锁解决,读的时候不修改。并发现又进一步的降低(效率降低),隔离性又提高(准确性提高))

  3. 幻读:读文件A的时候,去修改文件B~~,只要不影响到大家正在读的那个数据就行了,虽然对于直接读取的数据没影响,但是会发现两次读虽然关心的数据一样,但是结果集变了(第一次看到的只有一个.java文件,下次读的时候突然就是两个.java文件了)

    ⭐如何解决:串行化。此时并发程度最低了(串行执行的了),效率是最低的,隔离性最高了,数据的准确性最高了。

4、mysql的隔离级别有哪些,和上面的问题如何应对

  • [ ⭐] mysql给我们提供了“隔离级别”选项,给了四个挡位,可以根据实际的需求,选择不同的挡位
  1. read uncommitted:允许读未提交的数据,并发程度最高,隔离性最低。可能存在脏读/不可重复读/幻读问题;
  2. read committed:只能读提交之后的数据,相当于写加锁,并发程度降低,隔离性提高。解决了脏读,可能存在不可重复读/幻读问题;
  3. repeatable read:相当于读和写都加锁了,并发程度再降低,隔离性再提高。解决了脏读/不可重复复,可能存在幻读问题;
  4. serializable:严格执行串行化,并发程度最低,隔离性最高。解决了脏读/不可重复读/幻读问题,效率最低。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值