首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免insert与select组合使用时出现SQL死锁

避免insert与select组合使用时出现SQL死锁
EN

Stack Overflow用户
提问于 2013-01-26 06:30:04
回答 1查看 575关注 0票数 0

我正在尝试将页面插入到一个表中,该表具有一个按2000自动递增的排序列,如下所示:

代码语言:javascript
复制
INSERT INTO pages (sort,img_url,thumb_url,name,img_height,plank_id)
SELECT IFNULL(max(sort),0)+2000,'/image/path.jpg','/image/path.jpg','name',1600,'3'
FROM pages WHERE plank_id = '3'

问题是我在上传图像时触发了这些插入,所以这些查询中的5-10个几乎是同时运行的。由于某些原因,这会在某些文件上触发死锁。

知道这是怎么回事吗?

编辑:我运行的是MySQL 5.5.24和InnoDB。排序列有一个索引。

EN

回答 1

Stack Overflow用户

发布于 2013-01-28 00:41:37

我自己做的就是在插入时将sort设置为0,检索插入行的id,并将sort设置为id*2000。但是,您也可以尝试使用事务:

代码语言:javascript
复制
BEGIN;
INSERT INTO pages (sort,img_url,thumb_url,name,img_height,plank_id)
SELECT IFNULL(max(sort),0)+2000,'/image/path.jpg','/image/path.jpg','name',1600,'3'
FROM pages WHERE plank_id = '3';
COMMIT;

请注意,并不是所有的MySQL客户端库都支持多查询,因此您可能必须单独执行它们,但必须在一个连接的流中执行它们。

另一种方法是在执行INSERT时锁定整个表,但这将导致查询队列的增加,因为它们必须等待执行insert

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14531385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档