Mysql事务隔离级别

cremeb多商户打包代码的时候,总是重复的工作,就想着写了个脚本,记录一下sh脚本用到的一下方法:
点击了解 CRMEB多商户 其他开源项目源码 :了解更多
小姐姐二维码
在这里插入图片描述

一. 事务并发处理可能出现的问题

  1. 脏读:读到了其他事务还没有提交的数据;
  2. 不可重复读:对某个数据进行读取,发现了两次读取的结果不一致,因为前后读的时候其他事务对该信息做了修改;
  3. 幻读:事务A根据条件查询了N条数据,然后事物B对这些增加或X条符合事物A查询条件的数据,或者修改了X条符合事物A的查询条件的数据,导致事务A再次查询的时候会变成了N+X条数据。

二. 隔离级别

  1. 读未提交:允许读到其他事务未提交的数据,这种查询不会使用锁,可能会产生脏读,不可重复读、幻读等情况;
  2. 读已提交:只能读到已经提交的数据,可以避免脏读,如果需要避免不可重复读或者幻读要在sql中加锁;
  3. 可重复读:mysql中默认的级别,保证一个事务在相同条件下查询的结果是一致的,无法避免幻读。
  4. 可串行化:将事务进行串行化,也就是在一个队列中按照顺序执行,可串行化是最高的隔离级别,可以解决事务读取中所有可能出现的问题,但没有并发了。
隔离级别脏读不可重复读幻读
读未提交(READ UNCOMMITTED)允许允许允许
读已提交(READ COMMITTED)禁止允许允许
可重复读(REPEATABLE READ)禁止禁止允许
可串行化(SERIALIZABLE)禁止禁止禁止

三. 级别操作命令

  1. 查看当前隔离级别SHOW VARIABLES LIKE 'transaction_isolationi';,要大写;
  2. 修改隔离 SET SESSION TRANSACTION ISOLATION LEVE ****,***就是你需要修改的级别,上表中有对应;
  3. 修改事务是否自动提交 SET autocommit = 0,1 自动提交,0 不自动提交。

四. 并发异常的例子

脏读(重点是读到的不是最新)
  1. 设置隔离级别为最低的读未提交;
    mysql> SHOW VARIABLES LIKE 'transaction_isolation';
    +-----------------------+-----------------+
    | Variable_name         | Value           |
    +-----------------------+-----------------+
    | transaction_isolation | REPEATABLE-READ |
    +-----------------------+-----------------+
    1 row in set (0.00 sec)
     
    mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> SHOW VARIABLES LIKE 'transaction_isolation';
    +-----------------------+------------------+
    | Variable_name         | Value            |
    +-----------------------+------------------+
    | transaction_isolation | READ-UNCOMMITTED |
    +-----------------------+------------------+
    1 row in set (0.00 sec)
    
  2. 执行入库操作,但是不提交事务;
    mysql> begin;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> insert into user(name,age) value('尼古拉-赵四',20);
    Query OK, 1 row affected (0.00 sec)
    mysql> 
    
  3. 打开新的终端,修改隔离级别,并查询,可以查询到入库操作的数据,上面的图形化工具中没有显示这条数据; 记得将事务提交或回滚避免锁死。
    在这里插入图片描述
不可重复读 (重点是修改)
  1. 调整隔离级别
  2. 在左边终端开启事物,右边终端开启事务查询;
  3. 在左边事务进行修改操作提交,然后左边查询已经和第一次不一致了
    在这里插入图片描述
幻读 (重点在于新增或者删除)
  1. 查询所有数据只有4条;
  2. 另一个终端开始插入数据;
  3. 在次查询前一个终端,发现是5条数据
    在这里插入图片描述

基本理解如此

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值