Mysql中的事务

1.事务是干什么的?

事务要解决的是类似与转账问题的
什么转账问题呢?
小明要给小张转500块钱,小明刚转完(即他的账户-500)时,ATM停电了系哦小张的账户上没有转入500

2.什么是事务

事务就是一系列不可分割的操作,要都执行,要么都不执行。执行的时候会满足一定的特性,避免出现上面的问题

执行时候会满足什么特性呢?这就需要知道事务的四大特性

3.事务的特性

  1. 原子性:一个事务是一个不可分割的工作单位,要么全都做了,要么全都不做(本质上是通过回滚操作来实现的)
  2. 一致性:事务执行前后,数据处于合法状态;(例如转账,小明只有300块,却要转账500,转账后变成-200,这样的操作是不允许的)
  3. 持久性:事务执行后,数据被持久保存(即已经存储到磁盘中)
  4. 隔离性:多个事务并发执行时,事务之间相互不干扰(本质上就是线程安全问题)
    隔离性和并发是相悖的。
    隔离是保证数据的准确,并发是保证事务的效率,隔离性越强并发度越低

4.事务并发是产生的问题

  1. 脏读
    事务A读取到了事务B更新了但是未提交的数据,然后事务B由于某种错误发生回滚,那么事务A读取到的就是脏数据。
    例如:
    老师在黑板上写题,说这道题讲完就下课,写了个1+1=?小明看到这个后觉得很简单就出门上厕所了,小明出去后老师就把这道题给擦了,重写一道题,小明的这个读题操作就是脏读

解决脏读的办法:给写操作加锁,即在老师写题的时候不允许同学读黑板上的题,直到老师把题写完。

  1. 不可重复读
    一个事务在执行过程中,两次读到的数据不相同。
    例如:老师把题写完后,同学们也把题读完了,低头开始做题了,这个时候老师把题目给改了,同学们做完题抬头一看,发现题目和刚才不一样了。

解决不可重复读的办法:
同学们和老师约定好,他们在做题的时候,老师不允许改题。
即:给读操作也加个锁

  1. 幻读
    事务A在查询完记录总数后,事务B执行了新增数据的操作,事务A再次查询记录总数,发现两次查询的结果不一致,平白无故的多了几条记录,这种现象称为幻读。
    例如:老师又在黑板上加了一道题,同学做完刚才那一道,抬头后懵了,不是讲完这道下课吗?(hhhh,小明心想辛亏我跑的快hhhhhhhhh)

解决幻读的办法:
严格的串行化,即同学做题时,老师不允许修改题目,新增,删除 ,题目。

5.Mysql的隔离级别

  1. read uncommitted:事务中的修改,即使没有提交其他的事务也能读取数据,即读取未提交的数据,会产生脏读
  2. read committed:只允许读已经提交的数据,即加了写锁,会产生不可重复读的问题
  3. repeatable read:给读也加了锁(Mysql的默认隔离级别)会有幻读问题
  4. serializable:严格的串行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值