您的位置:首页 > 数据库 > MySQL

mysql抢单

2015-10-22 18:31 806 查看
翼帅为生活所迫, 近日要改用
mysql
了, 在搞一个类似抢单的的功能时, 由于要并发地获取表里的一条满足条件的记录,
ORACLE
的做法是
update returning
就可以, 大
mysql
不支持,只能使用更麻类的方法,先
select
出来,然后去
update
, 如果多个进程同时
select
到同一条记录,那么
update
的时候也只有一个能成功,这个通过判断
affected rows
就可知道. 如果没
update
成功的话, 就再
select
一次,直到
update
成功.

这个需求在
update
后还需要一定时间进行业务处理,如果类似秒杀的需求,
update
完成就可继续抢下一条,这时候
update
失败的情况应该会比较多,有些进程应当会有被饿死的危险.这种情况下怎么玩, 不知有没有人做过.

同时在处理这个问题的时候, 发现了
mysql
select for update
哪怕设置了limit 1还是会把整个表锁住,其它的进程执行同样的sql会被卡列, 手头没有oracle,不知道oracle会不会如此.预期的情况况是各琐各的,
select
到的记录才销,其它记录不锁.

引擎是
InnoDB


select * from table where status=0 limit 1 for update;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql oracle