MySQL运维11-MySQL的事务隔离级别

文章目录

  • 1、MySQL的事务隔离级别
  • 2、MySQL事务隔离级别的相关参数和命令
    • 2.1、查看事务隔离级别
    • 2.2、设置事务隔离级别
      • 2.2.1、在会话中设置事务隔离级别
      • 2.2.2、在配置文件中设置事务隔离级别
  • 3、MySQL的多版本并发控制(MVCC)
  • 4、总结

1、MySQL的事务隔离级别

事务隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也会越大。MySQL事务包含如下4个隔离级别,按隔离级别从低到高排列如下。

MySQL运维11-MySQL的事务隔离级别_第1张图片

2、MySQL事务隔离级别的相关参数和命令

2.1、查看事务隔离级别

  • 如下两种方法都可以查询当前的事务隔离级别:
mysql> show  variables like '%tx%';
mysql> SELECT @@global.tx_isolation, @@session.tx_isolation;

2.2、设置事务隔离级别

2.2.1、在会话中设置事务隔离级别

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

2.2.2、在配置文件中设置事务隔离级别

在配置文件内修改mysqld节的transaction-i solation参数的方式如下:

[mysqld]
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE}

如上配置文件transaction-isolation选项的级别名中有连字符,但SET TRANSACTION语句的级别名中则没有连字符。

不建议更改InnoDB的事务隔离级别。一些传统的商业数据库,如Oracle,使用了类似read-committed的隔离级别。但由于绝大部分场景下,MySQL的用户都使用默认的隔离级别repeatable read,此隔离级别下的使用验证会比其他隔离级别完善得多]]

3、MySQL的多版本并发控制(MVCC)

当事务A发出一个一致性读之时,即一个普通的SELECT语句,InnoDB将给事务A一个时间点。如果另一个事务在该时间点被指定之后删除一行并提交,则事务A看不到该行已被删除。插入和更新的处理与此相似。这被称为多版本并发控制(multi -versioned concurrency control)。

4、总结

  1. InnoDB事务隔离级别从低到高分为READ UNCOMMITED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE四个级别,默认为REPEATABLE READ级别,一般不建议修改InnoDB的默认事务隔离级别。
  2. MySQL的多版本并发控制(MVCC)可以让一个事务从事务开始时间就建立一个全库的一致性视图,不会出现不可重复读问题(即在事务A开始时间之后其他事务提交的数据,事务A是看不到的)。

你可能感兴趣的:(MySQL运维,mysql,运维,数据库,sql,服务器)