mysql不同隔离级别事务插入数据


前言

面试中问到了相关问题,做下问题记录

一、问题

问题是这样的,数据库默认隔离级别下,事务A插入一条数据,没有提交,事务B插入一条数据,提交,表id为自增,如果表是空表,事务A和事务B的id分别是多少。

二、测试

2.1.RR级别,mysql默认级别

2.1.1 打开一个mysql窗口,事务A

执行代码块

start transaction;
insert into a(age) value(1);

2.1.2 打开另一个窗口,事务B

执行

start transaction;
insert into a(age) value(2);
commit;

查看结果如下
在这里插入图片描述

2.1.3 提交事务A,再看结果如下

在这里插入图片描述
可以看到事务A的id是1,事务B的id是2,和先后commit没有关系。

2.2 READ-COMMITTED 级别下测试

2.2.1修改数据库的my.ini文件修改隔离级别

transaction-isolation=READ-COMMITTED

重启mysql

2.2.2 查看隔离级别是否已经修改

查看隔离级别命令

show variables like 'transaction_isolation';

在这里插入图片描述
可以看到已经生效了。

2.2.3 开始事务A

start transaction;
insert into a(age) value(3);

2.2.4开始事务B

start transaction;
insert into a(age) value(4);
commit;

2.2.5 查看结果

在这里插入图片描述

2.2.6 commit事务A,然后查看结果

在这里插入图片描述
可以看到rc级别下和rr级别是一样的。

2.3 READ-UNCOMMITTED下测试

2.3.1 代码如下

事务A

start transaction;
insert into a(age) value(5);

事务B

start transaction;
insert into a(age) value(6);
commit;

2.3.2 查看结果

在这里插入图片描述
可以看到已经都插入了,commit事务A也是一样的,并且顺序是事务A到事务B,id增长。

2.4 SERIALIZABLE下测试

2.4.1 代码

事务A

start transaction;
insert into a(age) value(7);

事务b

start transaction;
insert into a(age) value(8);
commit;

2.4.2 查看结果

在这里插入图片描述
commit事务A后看结果
在这里插入图片描述
可以看到一样是先开始事务的id先加一。

总结

1.mysql的数据库自增id和数据库的隔离级别没有关系,都是只要开始了事务,id就会增加1,后面的事务再执行就在原来的基础上加1。
2.oracle 前同事测试和mysql不一样,是谁先提交谁加1,这个我没有测试过,刚兴趣的可以自己测试下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值