MySQL隔离级别

事务隔离级别

事务隔离级别,会影响事务中会产生脏读、幻读、不可重复读等相关问题

隔离级别 脏读 不可重复读 幻读
读未提交(Read Uncommitted)
读已提交(Read Committed) X
可重复度(Repeatable Read) X X
串型(Serializable) X X X
  • 读未提交(Read Uncommitted)
    可能读到其他会话未提交事务修改的数据,存在脏读、不可重读读、幻读的问题
  • 读已提交(Read Committed)
    只能查询到已提交的数据。
    Oracle 默认的事务隔离级别。存在不可重读读、幻读的问题
  • 可重复读(Repeatable Read)
    无论什么时候查到的数据都和第一次查到的一致。
    MySQL 数据库 InnoDB 引擎默认的事务隔离级别。
    在范围查询时存在幻读的问题
  • 串行(Serializable)
    是最高的事务隔离级别,它严格服从 ACID 特性的隔离级别
    所有的事务依次逐个执行,事务之间互不干扰
    但每个事务读数据时都需要获取表级的共享锁,导致读和写都会阻塞,性能极差

设置事务隔离级别

  • 永久设置
    在 my.cnf、my.ini 文件中添加设置:
transaction-isolation=READ-UNCOMMITTED
  • 临时设置
# SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
set session transaction isolation level READ UNCOMMITTED;

查询事务隔离级别

# MySQL < 8
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

# MySQL >= 8.0
SELECT @@global.transaction_isolation;
SELECT @@session.transaction_isolation;
SELECT @@transaction_isolation;
posted @ 2024-01-15 23:55  艺言弈行  阅读(12)  评论(0编辑  收藏  举报