本篇内容介绍了“MYSQL对表的最大ID抢加锁时的阻塞分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!示例SQL:需求:从ORACLE转化到MYSQL的SQL,目的是多个会话轮询取表中满足条件最大ID的一行数据,然后第一个抢到的会话需要对这一行数据加锁,以免其他会话读到该行数据,在这期间,表是会不断有新进数据插入的。问题过免费主机域名程:
A会话执行 select for update;此时 B 会话继续往表中插入数据,让ID不断增长,例如当前满足条件的最大 QUEUEID 是278082665接着 C 会话重免费主机域名新执行以上 SELECT for update语句,理论上,当再次查询时需要加锁的ID 应该是 278082665,但发现此时C会话在等待锁。分析:于是,查了下锁看看:从上面结果发现lock_index是 INDEX_QUEUE_QUEUETYPE,而从SQL,我们继续查看执行计划 。很明显,主查询使用了子查询的索引,而该索引是非唯一性索引,MYSQL 的加锁是基于索引加锁的,同时从以上锁情况可以看出此存在对包含278082656在内的多条数据进行加锁。怎么解决:于是我们再重新看SQL,其实这里应该是要让主查询走具有唯一性的主键索引即可,这样便不会存在以上问题了,只需将主查询的WHERE q.queueid in ()改成 WHERE q.queueid =() ,这是开发规范问题。修改之后的执行计划:“MYSQL对表的最大ID抢加锁时的阻塞分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!
本篇内容主要讲解“Python如何连接Mysql实现图书借阅系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何连免费云主机、域名接Mysql实现图书借阅系统”吧! 我们在这里需要三张表,一张用户表,…