SQL,ps大神帮忙p两张照片忙

一条简单SQL语句出现死锁情况,请帮忙各位大神帮忙分析一下。
小弟有一SQL语句现在在多并发的情况下会出现死锁。希望各位大神帮忙给小弟分析一下。
UPDATE accountinfo SET usecnt = 20, version = version+1 WHERE usecnt & 0 AND accountid = 12 and version = 102
MySQL数据库,存储引擎为InnoDB,其中accountid为主键,usecnt和version没有任何索引。
当前事务使用的事务隔离级别为:READ_COMMITTED。
发生死锁的日志如下:
*** (1) TRANSACTION:
TRANSACTION 1331664, ACTIVE 40 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 11 lock struct(s), heap size 2936, 6 row lock(s), undo log entries 9
MySQL thread id 106, OS thread handle 0x334c, query id .25.85 root updating
UPDATE accountinfo SET usecnt = 20, version = version+1
WHERE usecnt & 0 AND accountid = 12 and version = 102
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 2151 page no 3 n bits 80 index `PRIMARY` of table `stamp_server_db`.`accountinfo` trx id 1331664 lock_mode X locks rec but not gap waiting
Record lock, heap no 10 PHYSICAL RECORD: n_fields 35; info bits 0
*** (2) TRANSACTION:
TRANSACTION 1331673, ACTIVE 39 sec starting index read
mysql tables in use 1, locked 1
11 lock struct(s), heap size 2936, 6 row lock(s), undo log entries 9
MySQL thread id 109, OS thread handle 0x3910, query id .25.85 root updating
UPDATE accountinfo SET usecnt = 20, version = version+1
WHERE usecnt & 0 AND accountid = 12 and version = 102
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 2151 page no 3 n bits 80 index `PRIMARY` of table `stamp_server_db`.`accountinfo` trx id 1331673 lock mode S locks rec but not gap
Record lock, heap no 10 PHYSICAL RECORD: n_fields 35; info bits 0
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 2151 page no 3 n bits 80 index `PRIMARY` of table `stamp_server_db`.`accountinfo` trx id 1331673 lock_mode X locks rec but not gap waiting
Record lock, heap no 10 PHYSICAL RECORD: n_fields 35; info bits 0
*** WE ROLL BACK TRANSACTION (2)
请各位大神,帮小弟看一下。怎么破。
我之前做项目,update没完全走索引,在mysql数据库压力大时确实也发生过短暂的deadlock。。。。 加上索引就好了,,,有时间还得研究研究mysql
--- 共有 1 条评论 ---
非常感谢您的回复,说实话我对Mysql真的是个小白水平。
version = version+1
猜测是这里吧,既有读又有写,高并发情况下可能会死锁。
--- 共有 1 条评论 ---
哦,还真说不准,我去试试。
对小公司来说mysql甭搞高级玩意(包括大并发)。换pgsql一了百了
--- 共有 1 条评论 ---
领导们非要用Mysql,你说的那个我都没用过。
version = version+1
把这个修改去掉,运行,即可,控制变量法分析出是否这个导致的bug
--- 共有 1 条评论 ---
大神,一语点醒梦中人啊,我去试一下。
难道没听说过 &for update ?
--- 共有 1 条评论 ---
我知道,接在select后面的,这种查询会获取一个X锁,不会造成死锁吧。而且我的程序中,没有用到这个。
accountid 唯一就拆成两句写先查询后更新SQL大神请进,很需要你们的帮忙,多谢啦 - Sql Server当前位置:& &&&SQL大神请进,很需要你们的帮忙,多谢啦SQL大神请进,很需要你们的帮忙,多谢啦&&网友分享于:&&浏览:0次SQL大神请进,很需要你们的帮忙,谢谢啦我现在遇到一个问题:现在有两张表,一张是Order(订单表),另一张是OrderDetail(订单明细表),两个表通过OrderId关联。Order表中的ProductType字段是后来才加的,现在是想找到Order表中Id和OrderDetail表中的OrderId相等的数据,然后把OrderDetail表中ProductType字段的值赋给Order表中的ProductType字段。还有一个重要的细节就是,一个订单可能有多个订单明细(也就是一个订单可能都多个商品的意思),这种情况是把OrderDetail表中多个ProductType字段的值拼接到Order表中的ProductType字段。麻烦大家想想我以上表述的这个问题用SQL语句该怎么解决?非常感谢。
------解决思路----------------------UPDATE&[Order]
SET&ProductType=
(SELECT''+CAST(ProductType&AS&VARCHAR(10))FROM&OrderDetail
WHERE&OrderDetail.OrderId=ID
FOR&XML&PATH(''))SQL2005+有效------解决思路----------------------UPDATE&Order
SET&ProductType=
(SELECT&STUFF((SELECT&','+ProductType&FROM&&OrderDetail&WHERE&&OrderDetail.OrderId=Order.Id&FOR&XML&PATH('')),1,1,''))
中间用,分割,可以自己处理成需要的
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有求大神帮忙啊,急急急!!!!!!!【sql吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:37,901贴子:
求大神帮忙啊,急急急!!!!!!!收藏
有一个学院想要把学院部门(领导、教师、部门名等)、教师的资料、学生的资料、课程的资料,成绩存储到数据库中,现请根据自己的理解,分析所要存储的资料有哪些,需要设置哪些表,字段,表之间的关系如何,并1. 画e-r图2. 设计并建立一个以自己名字命名的数据库,以及各数据库表。3. 查询名为“实习实训基地”的部门,有哪些人。4. 查询某个班级的某门课的学生平均成绩。5. 查询某门课程的学生的男生数和女生数。要求:1.星期天(7月19日)晚上21点前交给班长/学习委员,加上平时作业,班上统一刻盘,星期一早上9点交给我。2. 以“姓名-学号”命名的doc文档,里有e-r图,自己的数据库表设计说明,sql语句和截图。3.数据库源文件。数据库可以采用mysql数据库,或者sqlserver数据库,mysql数据库可用这个,安装时注意不要解压安装在桌面或者我的文档中,最好直接解压到d盘或者e盘。
来达内学sql,先培训,就业后付款,0首付,0基础入学,想学数据库就来达内!达内数据库培训,总监级讲师授课,自助研发TTS教学系统,120入门到精通
有偿帮忙,有意私聊
登录百度帐号推荐应用11:42 提问
求SQL大神帮忙解决问题!!!!!
这段SQL就是要查出某一个ID值在数据库全局的使用情况,然后用新的ID替换掉原来的数据。
但是会一直报错,如图,求解!如果有更好的写法更好!
declare @str varchar(100)
set @str='3a28c205-df29-40b0-b246-74fd8aa70a12';
declare @tablea table(name sysname, status tinyint, xusertype smallint, id int)
insert into @tablea
select name,status,xusertype,
declare @tableb table(name sysname, xtype char(2), id int)
insert into @tableb
select name,xtype,
declare @tableNmae varchar(100);
declare @columnName varchar(100);
declare @query varchar(8000);
declare @updateSql varchar(8000)
declare curs cursor local for
select query = 'if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'') print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from @tablea a join @tableb b on a.id=b.id
where b.xtype='U' and a.status&=0 and a.xusertype in(175,239,231,167) ;
select @tableNmae = name from @
select @columnName = name from @
select @updateSql = 'UPDATE '+@tableNmae+ ' SET '+ @columnName+' = LOWER(NEWID()) WHERE
'+ @columnName+ 'like ''%'+ @str +'%'''
fetch next from curs into @query
while @@fetch_status=0 begin
exec(@query)
exec(@updateSql)
fetch next from curs into @query
close curs
deallocate curs
按赞数排序
自己结一下吧
declare @cloumns varchar(40)
declare @tablename varchar(40)
declare @str varchar(40)
declare @counts int
declare @sql nvarchar(2000)
declare @updateSql nvarchar(2000)
declare MyCursor Cursor For
Select a.name as Columns, b.name as TableName from syscolumns a,sysobjects b,systypes c
where a.id = b.id
and b.type = 'U'
and a.xtype=c.xtype
and c.name like '%char%'
set @str='eb130b34-1516-43cb-808f-d26a90ea6cf3'
Open MyCursor
Fetch next From MyCursor Into @cloumns,@tablename
While(@@Fetch_Status = 0)
set @sql='select
@tmp_counts=count(*) from ' +@tablename+ ' where ' +@cloumns+' = ''' +@str+ ''''
execute sp_executesql
@sql,N'@tmp_counts int out',@counts out
if @counts&0
print '***************************************************'
print '表名为:'+@tablename+',字段名为'+@cloumns
select @updateSql = 'UPDATE '+@tableName+ ' SET '+ @cloumns+' = ''421dda10-7dbe-4d19-89e4-1e782bc4ee48'' WHERE '+ @cloumns+ ' = '''+ @str +''''
exec(@updateSql)
print '表名为:'+@tablename+',字段名为'+@cloumns+'已更改'
Fetch next From MyCursor Into @cloumns,@tablename
Close MyCursor
Deallocate MyCursor
图片位置报错
'like'+'%'+@str+'%'
自己检查下
select query = 'if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
select query = 'if exists(select 1 from ['+b.name+'] where ['+a.name+'] like
''' + '%'+ @str+ '%' +''')
--' 默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第1个'就是转义符
应该是更新like这少了一个空格吧
这样试试:
select @updateSql = 'UPDATE '+@tableNmae+ ' SET '+ @columnName+' = LOWER(NEWID()) WHERE
'+ @columnName+ ' like ''%'+ @str +'%'''
更新语句,like前面与字段之间少了空格
其他相似问题}

我要回帖

更多关于 三和大神 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信