7.事务

本文最后更新于:2021年10月1日 晚上

事务

概述

事务:事务里面的操作,要么都成功,要么都失败

事务原则:ACID

  • 原子性:同一个事务中的操作同时成功或失败,不能只发生一个

  • 一致性:事务操作前后的数据完整性一致

  • 隔离性:多个用户同时操作,相互不会影响

  • 持久性:事务一旦提交就不可逆

    如果事务没有提交,那么数据状态保持不变;

    如果事务已经提交,那么无论发生什么事情,数据的状态都会保持提交后的状态

事务的隔离级别

脏读

一个事务读取了另一个事务未提交的数据

不可重复读

在一个事务内读取表中的某一行数据,多次读取结果不同

这个不一定是错误,只是场合不对

幻读(虚读)

一个事务内读取到了别的事务插入的数据,导致前后读取不一致

Q: 不可重复读和幻读的区别?

A: 表面上看,似乎两者都表现为两次读取的结果不一致。但不可重复读的重点在于updatedelete,而幻读的重点在于insert

​ 所以说,幻读和不可重复读的最大区别在于 如何通过锁机制来解决它们产生的问题

​ (幻读需要锁表,不可重复读应该只用锁对应的行?)

MySQL事务操作

  • MySQL是默认开启事务自动提交的
1
2
set autocommit = 0 	-- 关闭事务自动提交
set autocimmit =1 -- 开启
  • 手动处理事务的sql编写逻辑

    1
    2
    3
    4
    5
    6
    start transaction  -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
    insert xxx
    insert xxx
    commit -- 事务结束,提交,数据持久化。只有提交后,上面的操作才能持久化保存

    rollback -- 如果失败实施回滚:回到原来的样子。如果已经commit,那么回滚后还是改变后的结果;但如果还没有commit,回滚后是最初w
    • savepoint 保存点名 :定义事务处理过程中的保存点

      rollback to savepoint 保存点名:回滚的保存点

      release savepoint 保存点名:撤销保存点


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!