在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

MySQL如何批量更新死锁

560次阅读
没有评论

共计 1144 个字符,预计需要花费 3 分钟才能阅读完成。

这篇“MySQL 如何批量更新死锁”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL 如何批量更新死锁”文章吧。

表结构如下:

CREATE TABLE `user_item` ( `id` BIGINT(20) NOT NULL,
 `user_id` BIGINT(20) NOT NULL,
 `item_id` BIGINT(20) NOT NULL,
 `status` TINYINT(4) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_1` (`user_id`,`item_id`,`status`)) ENGINE=INNODB DEFAULT CHARSET=utf-8

SQL 语句如下:

update user_item set status=1 where user_id=? and item_id=?

原因分析:

 mysql 的事务支持与存储引擎有关,MyISAM 不支持事务,INNODB 支持事务,更新时采用的是行级锁。这里采用的是 INNODB 做存储引擎,意味着会将 update 语句做为一个事务来处理。前面提到行级锁必须建立在索引的基础,这条更新语句用到了索引 idx_1,所以这里肯定会加上行级锁。  行级锁并不是直接锁记录,而是锁索引,如果一条 SQL 语句用到了主键索引,mysql 会锁住主键索引;如果一条语句操作了非主键索引,mysql 会先锁住非主键索引,再锁定主键索引。

这个 update 语句会执行以下步骤:

由于用到了非主键索引,首先需要获取 idx_1 上的行级锁

紧接着根据主键进行更新,所以需要获取主键上的行级锁;

更新完毕后,提交,并释放所有锁。

如果在步骤 1 和 2 之间突然插入一条语句:update user_item …..where id=? and user_id=?, 这条语句会先锁住主键索引,然后锁住 idx_1。

蛋疼的情况出现了,一条语句获取了 idx_1 上的锁,等待主键索引上的锁;另一条语句获取了主键上的锁,等待 idx_1 上的锁,这样就出现了死锁。

解决方案:

先获取需要更新的记录的主键

select id from user_item where user_id=? and item_id=?

逐条更新

 update user_item set status=? where id=? and user_id=?

批量循环重复第一步和第二步即可

以上就是关于“MySQL 如何批量更新死锁”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计1144字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 夜色福利久久久久久777777 | 人人妻人人澡人人爽久久av | 成人精品在线视频 | 久久婷婷人人澡人人喊人人爽 | 国产成人精品电影在线观看18 | 精品人妻人人做人人爽夜夜爽 | 美女网站免费观看视频 | 亚洲精品欧美综合四区 | 久久99久久99精品免观看 | 99精品国产在热久久无码 | 日本一级毛片一级裸片 | 久久精品国产亚洲av麻豆小说 | 亚洲一区二区综合 | 国产97色在线 | 亚洲 | 亚洲视频2 | 日韩城人网站 | 韩国精品福利一区二区三区 | 国产a不卡 | 青青草原精品99久久精品66 | 国产一卡2卡3卡四卡高清 | 亚洲av无码一区东京热久久 | 成人看的午夜免费毛片 | 精品黑人一区二区三区 | 婷婷色在线观看 | 一区不卡| 国产免费又爽又色又粗视频 | 一区二区精品在线观看 | 午夜理伦片免费 | 伊人干综合网 | 亚洲第一页在线观看 | 久久久久国产精品无码免费看 | 一边摸一边做爽的视频17国产 | 亚洲av毛片一区二区三区 | 久久久精品电影 | 国产精品永久免费自在线观看 | 欧美大陆日韩 | 免费中文字幕日产乱码 | 人妻无码久久久久久久久久久 | 成人精品在线 | 在线免费观看毛片 | 无套熟女av呻吟在线观看 |