Mysql事务(Transaction)

概述:

事务是实际开发中,比较常见业务逻辑操作中都会存在问题,比如转账的业务,需要将一个账户的钱转向到另一个账号,此时会涉及到两个修改操作:A账户钱减少,B账户钱增加;这两个操作要保证能同时成功或者同时失败,那么这一个业务需求(逻辑单元)就称之为一个事务。

在这里插入图片描述
事务特性:
1.原子性: 对于事务中的多次更新操作要么同时成功,要么同时失败

2.一致性:保证事务操作完成之后,所有的结果一致

3.隔离性:事务之间各自独立存在互相不影响

4.持久性:事务完成之后,确保所有的数据长期持久的存在

Mysql事务的使用:

ps:mysql中只有使用InnoDB引擎才能支持事务;MyISAM引擎不支持事务

在这里插入图片描述

参考代码:

-- 开启事务(事务一旦开,后续的所有更新操作都在这个事务中,直到提交后才会对物理表产生影响)
start transaction;

-- 设置保存点(在当前位置设置保存点,通过rollback to 保存点,可以回滚到该位置)
savepoint p1;

-- 回滚保存点(回滚到指定的保存点:一旦回滚,则当前保存点会撤销)
rollback to p1;

-- 回滚到事务开始的位置
rollback; 

-- 提交事务
commit;

事务隔离级别:

由于实际的业务操作可能会涉及到很多事务的并发操作,因此在事务并发时可能会遇到一下问题:

  1. 丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。

  2. 脏读:事务A读取了事务B更新的数据,而此时事务B并未提交,那么A读取到的数据是脏数据

    脏数据

  3. 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新
    并提交,导致事务A多次读取同一数据时,结果 不一致。

  4. 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B
    就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有
    改过来,就好像发生了幻觉一样,这就叫幻读。

对于以上可能出现的问题,数据库中引入事务隔离级别的解决方案:

在这里插入图片描述
以上是解决事务并发问题的方案,其中隔离级别从低到高,对数据操作的效率影响从低到高;Mysql中默认的隔离级别是:repeatable-read

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值