MySQL-8.0 事务隔离级别

MySQL-8.0 事务隔离级别

查看数据库事务隔离级别

mysql> show variables like 'transaction%';
mysql> select @@transaction_isolation;
mysql> SELECT @@GLOBAL.transaction_isolation, @@GLOBAL.transaction_read_only;
mysql> SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;

修改事务隔离级别的方式

  • 由低到高分别为
  1. read uncommitted (读未提交)
  2. read committed (读已提交)
  3. repeatable read (可重复)
  4. Serializable (可串行化)

1.只在本次会话有效

mysql> set session transaction isolation level read committed;

2.设置全局的事务隔离级别,该设置不会影响当前已经连接的会话,新会话,将使用新设置的事务隔离级别

mysql> set global transaction isolation level read committed;

3.修改配置文件,重启后生效

[mysqld]
transaction-isolation = REPEATABLE-READ
transaction-read-only = OFF
select id,name,count from ent_stock;
select id,name,count from ent_stock lock in share mode;
update ent_stock s set s.count = s.count-1 where s.name = '库存-1';
insert into ent_stock(id,name,count) values(uuid(),'库存-3',1000);
级别 脏读 不可重复读 幻读
read uncommitted (读未提交)
read committed (读已提交)
repeatable read (可重复读)
Serializable (可串行化)

read uncommitted (读未提交)

初始数据:
开两个mysql窗口

MySQL-8.0 事务隔离级别_第1张图片
设置事务级别
MySQL-8.0 事务隔离级别_第2张图片

Transication A Transication B
begin
MySQL-8.0 事务隔离级别_第3张图片
MySQL-8.0 事务隔离级别_第4张图片
commit
MySQL-8.0 事务隔离级别_第5张图片 MySQL-8.0 事务隔离级别_第6张图片

rollback:

Transication A Transication B
begin
MySQL-8.0 事务隔离级别_第7张图片
MySQL-8.0 事务隔离级别_第8张图片
rollback;MySQL-8.0 事务隔离级别_第9张图片
MySQL-8.0 事务隔离级别_第10张图片

read committed (读已提交)

设置事务级别

在这里插入图片描述

Transication A Transication B
begin
MySQL-8.0 事务隔离级别_第11张图片
MySQL-8.0 事务隔离级别_第12张图片
commit
MySQL-8.0 事务隔离级别_第13张图片 MySQL-8.0 事务隔离级别_第14张图片

rollback:

Transication A Transication B
begin
MySQL-8.0 事务隔离级别_第15张图片
MySQL-8.0 事务隔离级别_第16张图片
rollback;MySQL-8.0 事务隔离级别_第17张图片
MySQL-8.0 事务隔离级别_第18张图片

你可能感兴趣的:(mysql,数据库,java)