Mysql事务隔离级别简要总结

  • 查看当前会话隔离级别
    select @@tx_isolation;

  • 查看系统当前隔离级别
    select @@global.tx_isolation;

  • 设置当前会话隔离级别
    set session transaction isolation level READ COMMITTED;

  • 开启事务
    set autocommit=offstart transactionbegin



隔离级别

  • read uncommitted(读取未提交数据)

A 事务能读取到,B事务修改的但未提交的数据 (脏读)

  • read committed(可以读取其他事务提交的数据)

A 事务不能读取到,B事务修改的但未提交的数据
A 事务能读取到,A事务修改的但未提交的数据
A 事务能读取到,B事务修改的并提交的数据

 //新开2个会话按如下顺序执行,测试:

 //A 事务 (会话1)
set session transaction isolation level READ COMMITTED;
begin ;
SELECT value FROM xx_table WHERE id=1; //此时 value字段值为1

//B事务 (会话2)
set session transaction isolation level READ COMMITTED;
begin 
SELECT value FROM xx_table WHERE id=1 //此时 value字段值为1

//A事务
UPDATE xx_table SET `value` = 2 WHERE id = 1;
COMMIT;

//B事务
SELECT value FROM xx_table WHERE id=1 //此时 value字段值为2 (不可重复读)
  • repeatable read (可重读)

A 事务不能读取到,B事务修改的但未提交的数据
A 事务能读取到,A事务修改的但未提交的数据
同一条数据中 ,A 事务不能读取到,B事务修改的并提交的数据 (可重读)

 //新开2个会话按如下顺序执行,测试:

 //A 事务 (会话1)
set session transaction isolation level REPEATABLE READ;
begin ;
SELECT value FROM xx_table WHERE id=1; //此时 value字段值为1

//B事务 (会话2)
set session transaction isolation level READ COMMITTED;
begin 
SELECT value FROM xx_table WHERE id=1 //此时 value字段值为1

//A事务
UPDATE xx_table SET `value` = 2 WHERE id = 1;
COMMIT;

//B事务
SELECT value FROM xx_table WHERE id=1 //此时 value字段值 还是为 1 (可重复读),和读提交级别的区别
  • serializable 串行化

写读操作事务,需等待其他事务执行完



参考资料

五分钟搞清楚MySQL事务隔离级别
互联网项目中mysql应该选什么事务隔离级别 -> Read Commited

你可能感兴趣的:(Mysql事务隔离级别简要总结)