Mysql事务详解

事务

  • 数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成
  • 事务指的是数据库一种保护数据的方式
  • 事务一般由增删改操作自动调用,事务根据数据库不同提交的时机也是不同的
    • MySQL数据库默认执行增删改就会提交事务
    • 我们可以设置为手动提交 set @@autocommit=0; -------------- 前面写begin或者start transaction
  • 事务的特征
    • ACID原则
      • 原子性、一致性、隔离性、持久性
    • 原子性
      • 事务是操作数据的最小单元,不可以再分
    • 一致性
      • 事务提交之后,整个数据库所看到的数据都是最新的数据
      • 所有人看到的数据都是一致的
    • 隔离性
      • 别人无法访问到我们未提交的数据,而且一旦这个数据被我修改,别人也无法进行操作
    • 持久性
      • 事务一旦被提交,数据库就进入一个全新的状态
      • 数据也不能返回上一个状态
  • 事务如何开启和提交?
    • 开启
      • 当我们执行增删改操作的时候就会默认开启一个事务
      • 这个事务和当前操作的窗口有关,别人是无法共享这个事务的
    • 提交
      • 手动
        • 显式
          • commit 提交
          • rollback 回滚
        • 隐式
          • 执行DDL操作会默认提交当前事务
          • 用户退出,事务统一进行回滚(mysql)
      • 自动
        • mysql数据库执行DML操作之后会自动提交事务
        • 好处
          • 方便
        • 坏处
          • 不能将多个sql纳入到一个事务,不便于管理
          • 当我们大批量插入数据的时候,数据库会频繁的开启关闭事务影响插入效率

事务的隔离级别

  • 根据数据库的不同用途,我们可以对数据库的事务进行级别的设置
  • 级别越高数据越安全,效率越低
    • 读未提交
      • 我们可以读取到别人未提交的数据
      • 有可能产生脏读问题
    • 读已提交
      • 只能读取别人提交后的数据
      • 不能达到可重复读,但是可以避免脏读
      • 有可能产生虚读或者幻读的情况
    • 可重复读
      • 当数据被我查询后,别人就不能修改这个数据了
      • 说明在我查询的时候已经有了事务操作到这个数据,查询都会开启事务
      • 但是不能防止别人查询别的数据
    • 序列化
      • 当前数据库只能存在一个事务,我操作数据库的时候,别人是不能访问数据库的
      • 这对于用户来讲数据相当安全,一般在倒库的时候才会开启这种级别
  • 脏读
    • 读取别人未提交的数据,这个数据是不安全的
  • 虚读
    • 第一次读取的数据,第二次读取的时候可能被人修改了
  • 幻读
    • 第一次读取的数据,第二次多了一条或者少了一条
posted @ 2023-05-17 16:18  、怪咖  阅读(154)  评论(0编辑  收藏  举报