MySQL-隔离级别

本文详细介绍了MySQL中InnoDB引擎的事务处理机制,包括如何关闭自动提交以实现手动控制事务,以及如何查看和设置不同的事务隔离级别,如repeatable read和read committed,以防止脏读、幻读和不可重复读等问题。

来自:https://blog.youkuaiyun.com/sinat_27564919/article/details/70808991

一:准备

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

SHOW VARIABLES LIKE '%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; //恢复默认的自动提交

二:隔离级别

1)查看隔离级别

select @@tx_isolation;

2)修改隔离级别

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

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

对脏读的处理 :A事务没有commit的数据,在B事务中没有读到。 

 可重复读的效果

4)read committed 演示:

提交读和可重复读的区别在于,前者在本事务未提交之前其他事务的增删改操作提交后会影响读的结果,读的是最新结果。 可重复读在读的过程中数据

始终是事务启动时的数据状态,未提交之前其他事物的增删改操作提交后都不会影响读的结果。读的是快照结果。 

改操作:

 

增操作

转载于:https://www.cnblogs.com/lbky/p/10131706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值