mysql同时更新同一记录吗_mysql同时更新多条记录的同一个字段

142989.html

142989.html

以上是表数据及结构。

语句如下:

update change_lyt set wid=

(case id

when 1 then 5

when 2 then 6

else 10

END)

where id in(1,2)

参考:http://www..com/bruceleeliya/p/3310137.html

上面的代码没有问题,但是要更新的值如果从数据表获取,那么问题就来了,代码如下

update change_lyt set wid=

(case id

when 1 then (SELECT a.wid from (select tmp.* from change_lyt tmp) a where a.id=2)

when 2 then (SELECT b.wid from (select tmp2.* from change_lyt tmp2) b where b.id=1)

else 10

END)

where id in(1,2)

此处有两个问题,

1.代码执行后只更新了一条数据,因为执行第一次更新时id=1的wid更新成2,第二次更新id=2的wid时,获取到的id=1的wid=2,更新失败

2.SELECT a.wid from (select tmp.* from change_lyt tmp) a where a.id=2看这个语句,如果此处换成select wid from change_lyt where id=2再执行上面的更新,将会报错,You can't specify target table ‘quenn’ for update

in FROM clause

原因:mysql不能先select出同一表中的某些值,再update这个表(在同一语句中)。

详见:http://blog..net/liu19871112/article/details/6952461

悲剧了。。。

我将wid加上唯一索引后就更新失败了。实验的目的:

1、wid确保唯一

2、用户使用排序功能时可以交换wid的值,mysql实现就是更新wid的值实现交换

看来这个思路是行不通了。。。

产生这个问题的背景:

1.当用户发表文章时同时添加排序字段的值,添加之前每次取数据表中wid最大的值加1然后插入新的数据

2.用户可以使用排序功能进行文章排序,功能实现靠的是交换wid的值

那么问题来了:

由于多用户高并发问题,wid的值存在重复值,这是当初没考虑到的。由于wid值重复,无法进行排序了。现在只能考虑高并发的数据一致性了,保证wid的值不重复,最起码同一个用户id下的wid值插入时保证没有重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值