MySQL事务测试

1.打开win+R,输入cmd,输入mysql -uroot -p回车,输入密码。关闭自动提交事务。

--查看是否是自动提交 1表示开启,0表示关闭
select @@autocommit;
--设置关闭
set autocommit = 0;

2.数据准备

--创建数据库
create database tran;
--切换数据库 两个窗口都执行
use tran;
--准备数据
 create table psn(id int primary key,name varchar(10)) engine=innodb;
--插入数据
insert into psn values(1,'zhangsan');
insert into psn values(2,'lisi');
insert into psn values(3,'wangwu');
commit;

 

这个我们开两个会话窗口进行测试。分别为a、b两个窗口。

 

3.测试1: read uncommitted(读未提交)

--a:
set session transaction isolation level read uncommitted;
--b:
set session transaction isolation level read uncommitted;

--a:
--开始事务
start transaction;
select * from psn;
update psn set name='zhaoliu';
selecet * from psn
--b:
start transaction;
select * from psn;

b读取的结果zhaoliu。产生脏读,因为a事务没有commit,读取到了不存在的数据

--a:
--提交事务
commit;
--b:
select * from psn;

b读取的数据是zhaoliu,因为a事务已经commit,数据永久的被修改。

 

4.测试2:read committed

--a:
set session transaction isolation level read committed;
start transaction;
select * from psn;
--b:
set session transaction isolation level read committed;
start transaction;
select * from psn;

执行到这里两个窗口的数据是一致的。

--a:
update psn set name ='tianqi' where id = 1;
select * from psn;
--b:
select * from psn;

执行到此处两个窗口的数据不一致,b窗口中读取不到更新的数据

--a:
commit;
select * from psn;
--b:
select * from psn;

5.测试3:repeatable read

--a:
set session transaction isolation level repeatable read;
start transaction;
select * from psn;
--b:
set session transaction isolation level repeatable read;
start transaction;
select * from psn;
--此时两个窗口的数据是一致的
--a:
insert into psn values(4,'zhouba');
commit;
select * from psn;
​
--b:
select * from psn;
--读取不到添加的数据
insert into psn values(4,'zhouba');
--报错,无法插入数据
--此时发现读取不到数据,但是在插入的时候不允许插入,出现了幻读,设置更高级别的隔离级别即可解决

 

6.测试事务

--事务包含四个隔离级别:从上往下,隔离级别越来越高,意味着数据越来越安全
read uncommitted;   --读未提交
read commited;      --读已提交
repeatable read;    --可重复读
serializable        --序列化执行,串行执行
/*
  产生数据不一致的情况:
  脏读
  不可重复读
  幻读
*/

四种隔离级别会造成的异常情况:

隔离级别异常情况异常情况异常情况
读未提交 脏读 不可重复读 幻读
读已提交   不可重复读 幻读
可重复读     幻读
序列化      
原文地址:https://www.cnblogs.com/nyfq/p/14362599.html