作者carlcarl (carl)
看板Database
标题Re: [SQL ] select 後 insert
时间Tue Oct 16 00:39:07 2012
※ 引述《a613204 (胖胖)》之铭言:
: 想请问一下
: 我现在有一个系统 , 里面有报名人数的限制
: 我原本想法是先select出目前报名的人数 , 如果还没超过限制 , 就新增一笔报名资料
: 但是这样应该会有race condition的问题
: 想请问大家都怎麽解? 先lock住吗?
一般应该就lock table
http://stackoverflow.com/questions/264807/mysql-insert-race-condition
另外一个解法:
http://stackoverflow.com/questions/10500759
假设有个table `test` 栏位是 `name` 数量小於10的话就insert
INSERT INTO test (name)
SELECT '你的资料'
FROM dual
WHERE (
SELECT count( name )
FROM test
) < 10
dual是虚拟表
http://thobian.info/?p=1035
--
http://blog.carlcarl.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.230.133
1F:推 a613204:感谢 另外想请问一下第二种解法会有race condition问题吗? 10/16 00:49
2F:→ carlcarl:糟糕 我发现後面那个解法会有data miss的情形 10/16 05:46
3F:→ carlcarl:我用压力测试去测 应该是没有race condition的情况 10/16 05:47
4F:→ carlcarl:可是资料会莫名的不见 不知道为啥 所以还是用第一种解法 10/16 05:47
5F:推 a613204:谢谢 请问是不是因为insert跟select写在同一句SQL 10/16 10:55
6F:→ a613204:就不会有race condition的问题? 10/16 10:56
7F:→ carlcarl:我的想法是这样 不过我发现讲这种query的资料有点少 10/16 19:31
8F:→ carlcarl:所以没办法取得啥可信的资料来作验证> < 10/16 19:31