看板 Database 關於我們 聯絡資訊
※ 引述《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