Mysql事务和隔离级别(read committed, repeatable read)

Mysql事务和隔离级别(read committed, repeatable read)

所用查看并设置参数的命令

查看当前autocommit的状态

innodb引擎默认autocommit为on,也就是自动提交打开。事实上我们希望一个事务整体操作完毕后再统一提交。
查看当前autocommit的命令有:

show variables like ‘%autocommit%’;

Select @@autocommit;

如果一个事务没有commit,虽然通过select能够看到表中数据改变了,但断开数据库连接之后数据并没有改变。没有commit之前rollback能够回滚。Commit之后,rollback将不再起作用。

修改当前autocommit

set autocommit=0;

那么,一个事务的提交过程可以概括为:

Innodb引擎下,一个事务的sql语句大概如:
set autocommit=0;//关闭默认的自动提交
begin; //开启事务
update tb_gotesting set name='hh' where id=3113; //完成指定操作
commit; //提交
set autocommit=1; //恢复默认的自动提交

查看当前事务隔离级别

select @@tx_isolation;

修改会话事务隔离级别

set session transaction isolation level read committed;
set session transaction isolation level repeatable read;

隔离级别

mysql默认是repeatable read 隔离级别。在这种级别之下,能够有效防止脏读、幻读、不可重复读。以repeatable read作为隔离级别进行演示。

  • 对脏读的处理
    A事务没有commit的数据,在B事务中没有读到。
    Mysql事务和隔离级别(read committed, repeatable read)_第1张图片

  • 可重复读的效果
    Mysql事务和隔离级别(read committed, repeatable read)_第2张图片

read committed

提交读(不可重复读)和可重复读的区别在于,前者在本事务未提交之前其他事务的增删改操作提交后会影响读的结果。读的是最新结果。
可重复读在读的过程中数据始终是事务启动时的数据状态,未提交之前其他事物的增删改操作提交后都不会影响读的结果。读的是快照结果。
提交读的演示:

  • 改操作
    Mysql事务和隔离级别(read committed, repeatable read)_第3张图片

  • 增操作
    Mysql事务和隔离级别(read committed, repeatable read)_第4张图片

你可能感兴趣的:(技术细节)