MySql事务以及隔离级别

MySql事务

  • 什么是事务,事务的四大特性(ACID)?

    1. 原⼦性「Atomicity」:每个事务都是⼀个整体,不可再拆分,事务中所有的 SQL 语句要么都执⾏成功,要么都失败。
    2. ⼀致性「Consistency」:
      事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

      即为事务操作前后,数据总量不变

      换一种方式理解就是:事务按照预期生效,数据的状态是预期的状态。

      举例说明:张三向李四转100元,转账前和转账后的数据是正确的状态,这就叫一致性,如果出现张三转出100元,李四账号没有增加100元这就出现了数据错误,就没有达到一致性
    3. 隔离性「Isolation」:事务与事务之间不应该相互影响,执⾏时保持隔离的状态。
    4. 持久性「Durability」:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的

    即为一段代码块在执行过程中同时结束并不报错,要么同时成功,要么同时失败

  • 为什么需要事务?

    为了考虑数据的安全性,比如转账时,付款和收款要同时成功

  • 事务怎么使用?

    -- 声明事务
    start transaction;
    sql 1,
    sql 2,
    .....
    commit; -- 提交事务
    
    -- 如果上述代码中有错误则回滚
    rollback;
    
    -- 回滚点,如上述代码 sql1,sql2 如果执行失败回滚需要从 sql1 开始  如果想从别的地方开始可以给 sql语句之间添加回滚点
    -- 如下
    start transaction;
    sql 1,
    sql 2,
    savepoint R1;
    sql 3,
    .....
    commit;
    rollback R1;  -- 回滚后 事务将从 sql 3开始执行
    

MySQL隔离级别

  • 读未提交 产生 : 脏读 ,不可重复读,幻读
  • 读已提交 解决了 脏读 存在:不可重复读 ,幻读
  • 可重复读 解决了 脏读,不可重复读 存在: 幻读
  • 串行化 解决所有
-- 脏读
  事务与事务之间的隔离性最低,事务A可以读到别的事务未提交的数据
-- 不可重复读
  事务A只能读到别的事务 提交的数据 数据总量是一致的

-- 幻读
  同时开启事务A,B  当A插入一条数据,  B也执行插入语句,B执行失败,因为主键唯一,但是B读取不到A插入的那条数据
  1. 读未提交 产生问题,脏读 不可重复读 幻读

    A,B同时开启事务 A可以读到 B未提交的数据

    img

​ 如上图,A,B均操作临时库 所产生的数据均从临时库读取,所以有脏读现象

  1. 读已提交 解决了脏读问题

    A,B同时开启事务 开启事务,相当于创建了一块临时空间,用来存储数据库中的数据

    如果没有提交事务,则该临时空间内修改的数据,仅限于内存中,并不会持久化到数据库中

    img

  2. 可重复读 解决了 不可重复读问题

    img

  3. 串行化 解决幻读问题

    什么是幻读,即为上述图,A事务 插入了一条数据student id为1 , 当B也想插入这条数据时,失败 ,但是查询结果为空。即出现了幻觉,这条数据在临时库查不到,但确实持久化到了数据库中

    串行化,就是排队,事务A结束,才能开启事务B

相关代码

-- 查询隔离级别:
select @@tx_isolation;
selelect @@transaction_isolation; # 8.0版本的命令;
-- 设置隔离级别
set global transaction isolation level read uncommitted;
-- 开启事务
start transaction;

-- 隔离级别
read uncommitte --读未提交
read committed -- 读已提交 (Oracle)
repeatable read -- 可重复读 (MySQL默
serializable --串⾏化可以解决所有的问题


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值