MySQL之事务

基本介绍

  • 一个事务其实就是一个完整的业务逻辑。是一个最小的工作单元,不可再分。比如转账操作,一组操作,要么同时成功,要么同时失败。

  • 只有DML语句才会有事务一说,insert,delete,update

  • 事务:就是批量DML语句同时成功,或者同时失败

  • 怎么提交事务,怎么回滚事务?

    ​ 提交事务:commit;语句

    ​ 回滚事务:rollback;语句(回滚永远都是只能回滚到上一次的提交点)

  • mysql默认情况下是支持自动提交事务的(每执行一条DML语句,则提交一次)

  • 怎么将mysql的自动提交机制关闭掉?

    ​ 先执行这个命令:start transaction;

事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立
    环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

上述就是事务的四大特性,简称ACID。

并发事务问题

  1. 赃读:一个事务读到另外一个事务还没有提交的数据。
  2. 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
  3. 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据
    已经存在,好像出现了 “幻影”

隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××

事务和事务之间的隔离级别:

  • 读未提交:read uncommitted(最低的隔离级别)

    • 什么是读未提交?

      • 事务A可以读取到事务B未提交的数据
    • 这种隔离级别存在的问题就是:

      • 脏读。读到了脏数据,大多数的数据库隔离级别都是二档起步
  • 读已提交:read committed

    • 什么是读已提交?
      • 事务A只能读取到事务B提交之后的数据
    • 这种隔离级别解决了什么问题?
      • 解决了脏读的现象
    • 这种隔离级别存在什么问题?
      • 不可重复读取数据
      • 在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次在读取的时候,读取的数据是4条,3不等于4,称为不可重复读取
      • 这种隔离级别是比较真实的数据,每一次读到的数据是绝对的真实
      • Oracle默认的是读已提交
  • 可重复读:repeatable read(提交之后也读不到,永远读取的都是刚开启事务时的数据)

    • 什么是可重复读取?

      • 事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。
    • 可重复读解决了什么问题?

      • 解决了不可重复读取数据
    • 可重复读存在的问题是什么?

      • 可以会出现幻读。
      • 每一次读取到的数据都是幻象。不够真实
      • 早晨九点开始开启了事务,只要事务不结束,到晚上九点,读到的数据还是那样
      • mysql中默认的是可重复读
  • 序列化/串行化:serializable(最高的隔离级别)

    • 这是最高隔离级别。效率最低。解决了所有问题
    • 这种隔离级别表示事务排队,不能并发
    • synchronized,线程同步(事务同步)
    • 每一次读取到的数据都是最真实的,并且效率是最低的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值