最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

测试你对MySQL事务与隔离级别的理解的一道题_MySQL

来源:懂视网 责编:小采 时间:2020-11-09 19:47:44
文档

测试你对MySQL事务与隔离级别的理解的一道题_MySQL

测试你对MySQL事务与隔离级别的理解的一道题_MySQL:这是我自己琢磨出来的一道关于MySQL事务和隔离级别的题目,请填写问号部分的内容: 如果你能正确的说明出如下结果,那么你应该对MySQL事物和隔离级别有一定的认识了。 如果不是,那么可能你并不理解MySQL的事务和隔离级别。 另外这道题可以帮你理解为什么有
推荐度:
导读测试你对MySQL事务与隔离级别的理解的一道题_MySQL:这是我自己琢磨出来的一道关于MySQL事务和隔离级别的题目,请填写问号部分的内容: 如果你能正确的说明出如下结果,那么你应该对MySQL事物和隔离级别有一定的认识了。 如果不是,那么可能你并不理解MySQL的事务和隔离级别。 另外这道题可以帮你理解为什么有
这是我自己琢磨出来的一道关于MySQL事务和隔离级别的题目,请填写问号部分的内容:


如果你能正确的说明出如下结果,那么你应该对MySQL事物和隔离级别有一定的认识了。

如果不是,那么可能你并不理解MySQL的事务和隔离级别。

另外这道题可以帮你理解为什么有的时候会出现这个问题:
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

理解了这个错误的原因,就可以解决这个问题了。



MySQL 数据库有表
create table t(a int)engine=innodb,charset=utf8;
insert into t(a)values(0);
MySQL在两个session中按照如下顺序执行如下命令:
session A session B
set session transaction isolation level read committed;
SET AUTOCOMMIT=0; set session transaction isolation level read committed;
SET AUTOCOMMIT=0;
SELECT a FROM t;
结果:0
SELECT a FROM t;
结果:0
UPDATE t SET a = a+1;
SELECT a from t;
结果:?
SELECT a from t;
结果:?
UPDATE t set a=a+5;
结果:
COMMIT;(ROLLBACK)
SELECT a FROM t;
结果:? (如果session A被rollback,则为?)
COMMIT
SELECT a FROM t;
结果:?(如果session A被rollback,则为?)
SELECT a FROM t;
结果:?(如果session A被rollback,则为?)




结果是:

session A session B
set session transaction isolation level read committed;
SET AUTOCOMMIT=0; set session transaction isolation level read committed;
SET AUTOCOMMIT=0;
SELECT a FROM t;
结果:0
SELECT a FROM t;
结果:0
UPDATE t SET a = a+1;
SELECT a from t;
结果:1
SELECT a from t;
结果:0
UPDATE t set a=a+5;
结果:被阻塞住了,再等待session A的事务提交,也就是等待session A释放锁
一、如果session A超过一定时间没有释放锁(提交事务),
则session B因锁等待超时:ERROR 1205 (HY000): Lock wait timeout exceeded;
try restarting transaction
2、如果session A在session B锁等待超时前提交了事务,则session B执行update a =a+1;
Innodb锁等待时间为:show variables like '%innodb_lock_wait_timeout%';(Global, Session级别)
3、如果session A在session B锁等待超时前执行了rollback,则session B执行update a=a+1;
COMMIT;(ROLLBACK)
SELECT a FROM t;
结果:(一、报错。 二、6 三、如果session A被rollback,则为5)
COMMIT
SELECT a FROM t;
结果:(一、报错。 二、6 三、如果session A被rollback,则为5
SELECT a FROM t;
结果\一、如果session B锁等待超时,则为1
二、如果session B未超时,且session A提交事务则为6
三、如果session A被rollback,则为5)



思考,换成其它事务隔离级别,那么结果又是什么?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

测试你对MySQL事务与隔离级别的理解的一道题_MySQL

测试你对MySQL事务与隔离级别的理解的一道题_MySQL:这是我自己琢磨出来的一道关于MySQL事务和隔离级别的题目,请填写问号部分的内容: 如果你能正确的说明出如下结果,那么你应该对MySQL事物和隔离级别有一定的认识了。 如果不是,那么可能你并不理解MySQL的事务和隔离级别。 另外这道题可以帮你理解为什么有
推荐度:
标签: 测试 级别 mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top