首页 > 技术文章 > 003MySQL从入门到入土(事务)

miansj 2022-03-06 16:41 原文

003MySQL从入门到入土(事务)


事务

  • 事务的简介

  • 事务的操作

  • 事务的四大特性

  • 并发事务问题

  • 事务的隔离级别

  • 事务的简介

    • 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
  • 事务的操作

    • #一、方式一
      1、查看 设置事务提交方式
      SELECT @@autocommit;		#查看事务提交方式 如果1是自动提交 0是手动提交。
      SET @@autocommit=0;  #设置系统事务手动提交
      
      2、提交事务
      COMMIT;
      
      3、回滚事务
      ROLLBACK;
      
      #二、方式二
      1、开启事务
      START TRANSACTION 或 BEGIN;
      
      2、提交事务
      COMMIT;
      
      3、回滚事务
      ROLLBACK;
      
    • -- 一、方式一
      --转账操作(张三给李四转账1000)
      --1、设置事务手动提交
      SET @@autocommit=0;  
      --2、查询张三账户余额
      SELECT * FROM account where name = '张三';
      --3、将张三余额-1000
      UPDATE account set money = money - 1000 where name = '张三';
      --4、将李四账户余额+1000
      UPDATE account set money = money + 1000 where name = '李四';
      
      --1、提交事务 如果没有出现异常 需要单独执行
      COMMIT;
      
      --1、回滚事务 如果出现异常 需要单独执行
      ROLLBACK;
      
      
      -- 一、方式二
      --转账操作(张三给李四转账1000)
      --1、开启事务需要手动提交
      START TRANSACTION;  
      --2、查询张三账户余额
      SELECT * FROM account where name = '张三';
      --3、将张三余额-1000
      UPDATE account set money = money - 1000 where name = '张三';
      --4、将李四账户余额+1000
      UPDATE account set money = money + 1000 where name = '李四';
      
      --1、提交事务 如果没有出现异常 需要单独执行
      COMMIT;
      
      --1、回滚事务 如果出现异常 需要单独执行
      ROLLBACK;
      
      
  • 事务四大特性

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

    问题 描述
    脏读 一个事务读到另外-一个事务还没有提交的数据。
    不可重复读 一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
    幻读 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 "幻影"。
  • 事务隔离级别

    隔离级别 脏读(会不会出现) 不可重复读 幻读
    Read uncommitted
    Read committed ×
    Repeatable Read (默认) × ×
    Serializable × × ×
    --查看事务隔离级别
    SELECT @@TRANSACTION_ISOLATION;
    --设置事务隔离级别
    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {Read uncommitted | Read committed | Repeatable Read | Serializable}
    
    注意:事务隔离级别越高,数据越安全,但是性能越低。
    

推荐阅读