各位用户为了找寻关于mysql隔离级别详解及示例的资料费劲了很多周折。这里教程网为您整理了关于mysql隔离级别详解及示例的相关资料,仅供查阅,以下为您介绍关于mysql隔离级别详解及示例的详细内容
只是单纯知道事物的隔离级别,但是从未操作过 今日操作一次。
脏读(drity read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个rollback了操作,则后一个事务所读取的数据就会是不正确的。
不可重复读(non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
幻读(phantom read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
mysql的4种隔离级别
read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决 read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的 repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的 serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表
事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommitted) 是 是 是 不可重复读(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 否 否
创建数据表:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15create
table
shuzhi
(
id mediumint(8)
primary
key
,
name
varchar
(30),
shuzhi mediumint(10)
);
alter
table
shuzhi engine=innodb;
insert
into
shuzhi
values
(1,
'aa'
,1000);
insert
into
shuzhi
values
(2,
'bb'
,2000);
insert
into
shuzhi
values
(3,
'cc'
,3000);
insert
into
shuzhi
values
(4,
'dd'
,4000);
insert
into
shuzhi
values
(5,
'ee'
,5000);
insert
into
shuzhi
values
(6,
'ff'
,6000);
insert
into
shuzhi
values
(7,
'gg'
,7000);
insert
into
shuzhi
values
(8,
'hh'
,8000);
开始测试事物的4种隔离级别 第一种:read uncommitted (读未提交)
设置隔离级别
? 1 2 3 4#查询当前的隔离级别
select
@@tx_isolation
#设置隔离级别
set
session
transaction
isolation
level
[隔离级别]
set
session
transaction
isolation
level
read
uncommitted
先开启第一个进程 先开启事物 暂不进行查询
? 1 2窗口1
start
transaction
;
再开启第二个进程(终端) 先开启事物 修改一条记录 不commit
? 1 2 3窗口2
start
transaction
;
update
shuzhi
set
shuzhi=
'8888'
where
id=7;
去数据库查询发现id=7的值还是7000值并没改变
再去窗口1中查询这个记录
? 1 2 3窗口1
start
transaction
;
select
*
from
shuzhi
where
id=7
发现读到的数据是窗口2中为提交的数据 并不是7000
到此这篇关于mysql隔离级别详解及示例的文章就介绍到这了,更多相关mysql隔离级别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/helloworld_dream/article/details/85809640