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

MySQL如何批量更新死锁

577次阅读
没有评论

共计 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字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国模无码人体一区二区 | 男人的天堂精品国产一区 | 夜夜涩 | 国产做a爰片久久毛片a | 精品国产乱码久久久久乱码 | 麻豆成人久久精品二区三 | 午夜免费体验区 | 特级毛片a级毛片免费观看网站 | 亚洲精品另类 | 91极品女神嫩模在线播放 | 99久久免费精品国产免费 | 美国高清美女做性视频 | 一级片aaa| 九一国产在线观看 | 亚洲三级在线播放 | 久草综合在线观看 | 久久久xxxx | 激情亚洲婷婷 | 亚洲成a人片在线观看无码专区 | www在线| 精品国产一区二区三区免费 | 老司机在线高清免费视频 | 亚洲欧美乱日韩乱国产 | 国产成人亚洲精品无码影院bt | 一区二区三区在线 | 日本 | 狠狠噜天天噜日日噜 | 青青青国产精品国产精品美女 | 韩国精品一区视频在线播放 | 亚洲一区二区高清 | 国产精品人妻在线观看 | 亚洲依依成人亚洲社区 | 在线99视频 | 日韩成视频在线精品 | 成人免费视频一区二区三区 | 草久久免费视频 | 日本一区二区在线不卡 | 青青偷拍免费视频播放 | 青青国产成人久久激情91麻豆 | 午夜香蕉成视频人网站高清版 | 好男人午夜影院 | 国产大屁股喷水视频在线观看 |