mysql同时更新多条记录的同一个字段
来源:互联网 发布:小程序 post php接收 编辑:程序博客网 时间:2024/06/06 03:05
以上是表数据及结构。
语句如下:
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.cnblogs.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.csdn.net/liu19871112/article/details/6952461
悲剧了。。。
我将wid加上唯一索引后就更新失败了。实验的目的:
1、wid确保唯一
2、用户使用排序功能时可以交换wid的值,mysql实现就是更新wid的值实现交换
看来这个思路是行不通了。。。
产生这个问题的背景:
1.当用户发表文章时同时添加排序字段的值,添加之前每次取数据表中wid最大的值加1然后插入新的数据
2.用户可以使用排序功能进行文章排序,功能实现靠的是交换wid的值
那么问题来了:
由于多用户高并发问题,wid的值存在重复值,这是当初没考虑到的。由于wid值重复,无法进行排序了。现在只能考虑高并发的数据一致性了,保证wid的值不重复,最起码同一个用户id下的wid值插入时保证没有重复。
- mysql同时更新多条记录的同一个字段
- MySQL删除同一个字段的多条记录
- MySql同时更新多条记录的方法
- mysql批量更新多条记录的同一字段为不同值
- MySQL与Oracle UPDATE多条记录不同值,同时UPDATE多个字段
- MySQL同时添加多条记录
- mysql 对一个字段的多条记录update
- mysql 同一个字段作为条件更新
- mysql语句:批量更新多条记录的不同
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- MySql 批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- MySQL一次更新多条不同的记录
- SQL-更新某一字段的值同时除以10【MySQL】
- View基础知识
- .Net多线程编程—使用Visual Studio 2012进行调试
- 解决React Native中ListView控件在ios上不能滑动的问题
- 大端字节序和小端字节序
- java网络爬虫开发笔记(3)
- mysql同时更新多条记录的同一个字段
- java
- 2016年个人总结社区版
- 数字识别[Digit Recognizer](https://www.kaggle.com/c/digit-recognizer)
- 10 java中synchronized的用法
- First Angular2 App with TypeScript and Visual Studio 2013
- Qt v5.8.0 已发布
- Do Hard Things---做困难的事情
- windows10+ubuntu+GPT+UEFI 双系统