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