码迷,mamicode.com
首页 > 数据库 > 详细

MySQL事务测试

时间:2021-02-03 10:45:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:查看   varchar   level   src   不可重复读   ade   inf   zha   table   

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        --序列化执行,串行执行
/*
  产生数据不一致的情况:
  脏读
  不可重复读
  幻读
*/

 

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

隔离级别异常情况异常情况异常情况
读未提交 脏读 不可重复读 幻读
读已提交   不可重复读 幻读
可重复读     幻读
序列化      

MySQL事务测试

标签:查看   varchar   level   src   不可重复读   ade   inf   zha   table   

原文地址:https://www.cnblogs.com/nyfq/p/14362599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!