MySQL如何防止一条数据被重复利用?

mychinabc 2013-08-28 10:15:43
背景介绍:
二张表,一张存有所有现在可以用的MAC地址(Rawdata),一张表存使用后的记录(Bind),MAC地址只能用在一台产品上,如何在多个客户端查询Rawdata表取到一个MAC,
这条记录就不能给其它客户端使用了呢?请各位大虾给一下思路,谢谢了!~~




现在有两张表
表1:Rawdata --存入了N条MAC数据,MAC只能给一个产品用,
RID pk
MAC
status

表2:Bind --操作成功后写入这张表做记录
SN PK
RID FK



Rawdata表中我会预先录入数据,其Status如果为0,表示该条记录没有使用过

现在 我有一个SN,需要到Rawdata表中申请一条记录,该记录的Status必须为0,

使用完成后,我在Bind表中插入SN,RID,然后将Rawdata表中该条记录的Status标识为1,表示已经使用了

现在的问题:
如果有多个用户同时进行查询,那么会出现一条数据使用还没来得及将status从0更新为1,又被另外一条查询给查询到了,如何实现一条MAC记录不会被重复查询出来?
...全文
271 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2013-08-29
  • 打赏
  • 举报
回复
在Bind上的mac列建立一个唯一索引列即可 当插入报错 说明此mac已经使用 再去Rawdata申请 手动对表加表锁会导致并发严重下降
qincai1020 2013-08-29
  • 打赏
  • 举报
回复
start transcation declare sn char(15) select RID into sn from rawdata where status=0 limit 1 for update update rawdata set status=2 where RID=sn commit;
wwwwb 2013-08-29
  • 打赏
  • 举报
回复
查询时加入for update, 锁表->查询->替换->释放锁
ACMAIN_CHM 2013-08-28
  • 打赏
  • 举报
回复
引用 1 楼 qincai1020 的回复:
select ... for update?
qincai1020 2013-08-28
  • 打赏
  • 举报
回复
select ... for update?

56,677

社区成员

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

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