MySQL的随机更新的问题

yidongnan 发布于 2013/05/13 14:47
阅读 893
收藏 0
id week flag
1 1 0
2 1 0
3 3 0
4 3 0
5 3 0
6 5 0
7 5 0
数据如上所示

现在需要是 

    将week中的1中的任意一个的flag变成1  

    week中的3中的任意一个的flag变成1

    week中的5中的任意一个的flag变成1

并且需要得到被改变的id

最好是写成一句sql

    个人感觉比较棘手的是

当我取出 146的时候  在去更新的时候  在更新前 其他人更新了4 这种情况是不行的

当我先更新了随机产生的id  后面获取的时候 本来更新的146 后面获取之前的时候 其他人更新了5 改变的id取出就会是1456 这情况也是不行的


加载中
0
八宝旗
八宝旗
-- 设置自动提交
set session autocommit=1;
-- 更新并获取被更新的主键ID
set @mID=-1;
UPDATE table_name
SET flag=GREATEST(1,(@mID:=id)*0)
WHERE week=1 
ORDER BY RAND() LIMIT 1;
-- @mID代表被更新的主键ID,若为-1则代表没有待处理的记录

-- 取消自动提交
set session autocommit=0;
返回顶部
顶部