MySQL事务隔离级别

一、前置知识

1、为什么要隔离级别?

并发事务会出现更新丢失、脏读、不可重复读,幻读。

  • 更新丢失:当两个或多个事务更新同一行记录,会产生更新丢失现象。回滚覆盖,一个事务回滚操作,把其他事务已提交的数据给覆盖了;提交覆盖,一个事务提交操作,把其他事务已提交的数据给覆盖了
  • 脏读:一个事务读取到了另一个事务修改但未提交的数据
  • 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致
  • 幻读:在同一个事务中,前后两次查询同一个范围的数据时,发现有新的数据插入,导致结果集不一致的情况。

通过隔离级别可以解决。
在这里插入图片描述

1、隔离级别种类

在MySQL中,可以使用SET TRANSACTION ISOLATION LEVEL语句设置事务的隔离级别。隔离级别用于控制并发事务之间的相互影响程度。

MySQL支持以下四种事务隔离级别:

  1. READ UNCOMMITTED(未提交读):允许事务读取其他未提交的事务所做的修改。但是,会出现脏读、不可重复读和幻读等问题。

  2. READ COMMITTED(提交读):只允许事务读取已经提交的事务所做的修改。在同一个事务内,对同一行数据的查询可能返回不同的结果。

  3. REPEATABLE READ(可重复读):事务执行期间,保证多次读取同一数据结果一致。但是,可能出现幻读问题。

  4. SERIALIZABLE(可串行化):最高级别的隔离级别,完全串行化事务执行。确保每个事务对数据库的读写操作是相互独立的。

2、查看/设置隔离级别

查看事务隔离级别:

-- 查看当前会话的事务隔离级别  
SELECT @@transaction_isolation;
SELECT @@tx_isolation;
-- 查看全局的事务隔离级别  
SELECT @@GLOBAL.tx_isolation;
SELECT @@GLOBAL.transaction_isolation;

可以使用以下命令来设置事务的隔离级别:

SET [GLOBAL | SESSION] TRANSACTION
    transaction_characteristic [, transaction_characteristic] ...

transaction_characteristic: {
    ISOLATION LEVEL level
  | access_mode
}

level: {
     REPEATABLE READ
   | READ COMMITTED
   | READ UNCOMMITTED
   | SERIALIZABLE
}

access_mode: {
     READ WRITE
   | READ ONLY
}

具体情况如下,详细可以查看官方文档:https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html
在这里插入图片描述
例如,我们要设置当前会话的隔离级别为可重复读:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

3、手动控制事务

开启事务:BEGIN; 和 START TRANSACTION; 在功能上是等价的。它们都会开始一个新的事务。
提交事务:COMMIT;
回滚事务:ROLLBACK;

例如:

BEGIN;
// 相关操作
COMMIT;

4、事务的锁信息查看

具体可以查看官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-transactions.html

其中关键就三张表,如下:

Three InnoDB INFORMATION_SCHEMA tables enable you to monitor transactions and diagnose potential locking problems:

INNODB_TRX: Provides information about every transaction currently executing inside InnoDB, including the transaction state (f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Forlan

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值