楼主:
chang0206 (Eric Chang)
2014-06-26 10:08:11公司内部福委活动有招待看电影
福委会希望我们能写一个简单的划位系统
大概的架构我已经想好
可是在处理同时划位的部分没有什么想法
当A/B同时开启订位画面,画了重复的位子,又几乎同时按下送出时
后面按下送出的 update指令会盖掉前面一位的纪录
可是两位都会看到自己划位成功
请问大概需要怎样去避免这样的情况?
作者:
rickysu (Ricky)
2014-06-26 11:29:00SQL 有个东西叫做 transaction,请自行 google 吧
作者:
hSATAC (cAt Ash)
2014-06-26 11:34:00开一个 google docs 画座位表让大家自己填
所有划位不要立刻执行 放进一个资料表queue用另一支cron在背景每秒钟从queue取出来执行 成功或失败写回queue里面 前端程式过5秒回来读取queue看划位成功没好对不起真是个烂设计 :P
作者:
Kenqr (function(){})()
2014-06-26 12:07:00在update的where条件里指定位子必须是空的
先抢先赢吧 @@ 用insert设位子主键或是update位子要空的
作者:
alog (A肉哥)
2014-06-26 13:29:00transaction or table lock; row lock基本上lock table就够用了不要弄到dead lock即可
作者:
fowei (小维)
2014-06-26 16:36:00嗯. 建议用transation
楼主:
chang0206 (Eric Chang)
2014-06-26 17:40:00我也是朝transaction的方向在STUDY 现在的设计在update时,已经会去检查一个flag,但是还是会发生强碰的情况但是现在碰到的状况是A/B两人按下送出,都会满足条件接着进行后续的update 就算把update这边改用transcation那是不是说还要在transaction中去检查?要检查啥判断强碰了? 这些都还在想看要怎么弄 ..
作者:
alog (A肉哥)
2014-06-28 00:35:00不可能强碰 除非你写错你可以用两个以上的 mysql client 测试不同的 connection 应该是错开的不然你用 LOCK TABLE 来处理
楼主:
chang0206 (Eric Chang)
2014-06-29 20:55:00那可以建议一下应该怎么检查吗?