Re: [SQL ] select 後 insert

看板Database作者 (carl)時間11年前 (2012/10/16 00:39), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

10/16 00:49, , 1F
感謝 另外想請問一下第二種解法會有race condition問題嗎?
10/16 00:49, 1F

10/16 05:46, , 2F
糟糕 我發現後面那個解法會有data miss的情形
10/16 05:46, 2F

10/16 05:47, , 3F
我用壓力測試去測 應該是沒有race condition的情況
10/16 05:47, 3F

10/16 05:47, , 4F
可是資料會莫名的不見 不知道為啥 所以還是用第一種解法
10/16 05:47, 4F

10/16 10:55, , 5F
謝謝 請問是不是因為insert跟select寫在同一句SQL
10/16 10:55, 5F

10/16 10:56, , 6F
就不會有race condition的問題?
10/16 10:56, 6F

10/16 19:31, , 7F
我的想法是這樣 不過我發現講這種query的資料有點少
10/16 19:31, 7F

10/16 19:31, , 8F
所以沒辦法取得啥可信的資料來作驗證> <
10/16 19:31, 8F
文章代碼(AID): #1GV3ml9O (Database)
文章代碼(AID): #1GV3ml9O (Database)