MySQL 高难度需求语句如何写?

蔡袅 2014-11-05 04:59:02
表结构如下:
CREATE TABLE `imei` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`imei` varchar(123) DEFAULT NULL,
`netsn` varchar(120) DEFAULT NULL,
`productsn` varchar(120) DEFAULT NULL,
`binddate` datetime DEFAULT NULL,
`pcid` varchar(11) DEFAULT NULL,
`state` int(11) DEFAULT '0' COMMENT '0表示未用,1表示已用,2表示暂时占用',
PRIMARY KEY (`id`)
)


A用户想从该表指定随机获取N行,条件是:(netsn IS NULL) and (state=0),获取完了要将state设置为2

这期间别的用户不能获取这N行,SQL语句该如何写?或者有啥解决方案呢?
...全文
477 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-05-27
  • 打赏
  • 举报
回复
可以这么试试;
update imei,(select * from imei where (netsn IS NULL) and (state=0) order by rand() limit 5)v
set imei.state = 2
where imei.id = v.id
不过需要注意的是 ,上面这个sql 需要 SQL_SAFE_UPDATES = 0时,update和delete操作将会顺利执行
  • 打赏
  • 举报
回复
引用 8 楼 xx_mm 的回复:
引用 7 楼 Xuan6251237011 的回复:
三思哥的学生,现在混得如何
你是?
校友,曾经你在csdn回复过我
蔡袅 2016-05-21
  • 打赏
  • 举报
回复
引用 7 楼 Xuan6251237011 的回复:
三思哥的学生,现在混得如何
你是?
  • 打赏
  • 举报
回复
三思哥的学生,现在混得如何
wwwwb 2014-11-06
  • 打赏
  • 举报
回复
参考 SELECT...  FOR UPDATE
Rotel-刘志东 2014-11-06
  • 打赏
  • 举报
回复
思路: 先随机获取N行数据,后进行锁定,其他就不能操作所获取的数据。
ACMAIN_CHM 2014-11-05
  • 打赏
  • 举报
回复
先生成这 N 行的 ID, 然后进行锁定,这样其它人就无法操作这N行了。
蔡袅 2014-11-05
  • 打赏
  • 举报
回复
引用 2 楼 A9925 的回复:
用事务 你查查
可以说说吗?我用了事务不可以呀!
  • 打赏
  • 举报
回复
用事务 你查查
蔡袅 2014-11-05
  • 打赏
  • 举报
回复
木有人回复,别吓我啊

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧