mysql隔离级别示例

只是单纯知道事物的隔离级别,但是从未操作过 今日操作一次。

mysql的4种隔离级别
  1. read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
  2. read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
  3. repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的
  4. serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表
创建数据表:
create 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 (读未提交)

设置隔离级别

#查询当前的隔离级别
SELECT @@tx_isolation
#设置隔离级别 set session transaction isolation level  [隔离级别]
set session transaction isolation level  read uncommitted

先开启第一个进程 先开启事物 暂不进行查询

窗口1
start transaction;

再开启第二个进程(终端)
先开启事物 修改一条记录 不commit

窗口2
start transaction;
update shuzhi set shuzhi='8888' where id=7;

去数据库查询发现id=7的值还是7000值并没改变
mysql隔离级别示例_第1张图片

再去窗口1中查询这个记录

窗口1
start transaction;
select * from shuzhi where id=7

mysql隔离级别示例_第2张图片

发现读到的数据是窗口2中为提交的数据 并不是7000

你可能感兴趣的:(mysql)