mysql 事务

mysql 事务

  • 事务用于保证数据的一致性,它由一组相关的dml 【update, insert, delete】语句组成【要么全成功,要么全失败,🔒】;

  • 在执行事务的时候,mysql会在表上加锁,防止其他用户改表;

    start transaction -- 开始一个事务,
    set autocommit=off
    savepoint -- 保存点, 设置保存点
    rollback to -- 保存点,退回事务
    rollback -- 退回全部事务
    commit -- 提交事务,所有操作生效,不能退回,自动删除该事务的所有保存点;
    
  • 当提交事务后【commit】,会自动删除该事务的所有保存点,结束事务,删除保存点,释放锁,数据生效,其他会话或连接将可以查看到事务变化后的新数据【隔离级别】;

  • 事务注意事项:

    • 默认情况下,dml操作是自动提交,不能rollback;
    • 开始一个事务,rollback,默认退回事务开始的状态;
    • 可以在一个事务中,创建多个保存点,savepoint;
    • 在事务提交之前,可以退回,commit;
    • 事务机制,需要innodb引擎;
  • 事务隔离级别【锁的级别 】

    • 多个连接开启各自事务操作数据时,数据库系统要负责隔离操作,以保证各个连接在获取修改数据时的准确性;

    • 数据读取错误:

      • 脏读:读取一个未提交的修改【数据还不确定】;
      • 不可重复读:其他事务做了修改,删除,而导致每次反击结果不一样;
      • 幻读:其他事务做了插入,导致返回结果不一样;
    • 隔离级别

      隔离级别 脏读 不可重复读 幻读 加锁读
      读未提交(read uncommitted) 不加 能看到别人事务;
      读已提交(read committed) × 不加 不能看到别人事务,但能看到提交后数据
      可重复读(repeatable read) × × × 不加 别人提交后的也看不到
      可串行化(serializable) × × × 在操作时,有别人在操作,会等待别人提交后操作;
      -- 查看当前会话隔离级别
      SELECT @@tx_isolation;
      -- 查看系统当前隔离级别;
      selsct @@global.tx_isolation;
      -- 设置当前会话隔离级别
      SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
      -- 设置系统当前隔离级别
      SET global TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
      
    • 事务的ACID特性

      • 原子性【Atomicity】
      • 一致性【Consistency】
      • 隔离性【Isolation】
      • 持久性【Durability】
posted @ 2025-03-05 20:23  烟雨断桥  阅读(8)  评论(0)    收藏  举报