作者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
推 a613204:感謝 另外想請問一下第二種解法會有race condition問題嗎? 10/16 00:49
→ carlcarl:糟糕 我發現後面那個解法會有data miss的情形 10/16 05:46
→ carlcarl:我用壓力測試去測 應該是沒有race condition的情況 10/16 05:47
→ carlcarl:可是資料會莫名的不見 不知道為啥 所以還是用第一種解法 10/16 05:47
推 a613204:謝謝 請問是不是因為insert跟select寫在同一句SQL 10/16 10:55
→ a613204:就不會有race condition的問題? 10/16 10:56
→ carlcarl:我的想法是這樣 不過我發現講這種query的資料有點少 10/16 19:31
→ carlcarl:所以沒辦法取得啥可信的資料來作驗證> < 10/16 19:31