【已解決】insert如何防止並發?

來源:互聯網
上載者:User
抽獎機會發放如何防止並發?

需求是這樣的:使用者post某個資料過來我就給使用者一個抽獎機會,即資料庫裡增加一條記錄,一個使用者當天最多隻能獲得一次機會。

如何防止insert的時候由於並發導致多insert了

回複內容:

抽獎機會發放如何防止並發?

需求是這樣的:使用者post某個資料過來我就給使用者一個抽獎機會,即資料庫裡增加一條記錄,一個使用者當天最多隻能獲得一次機會。

如何防止insert的時候由於並發導致多insert了

好的方式應該是使用者主鍵+活動id+當天時間做聯合唯一主鍵約束,這樣才是真正的插入一條記錄

其次防止並發應該加上鎖,類似這樣的可以用悲觀鎖,即

beginSELECT * FROM table WHERE userid = ? AND eventid = ? AND current_day = ? for update# 判斷是否為空白  #為空白  insert   commit  #不為空白  error  rollback

並發高的話,不建議採用select ** for update操作,因為可能把資料庫給拖死。
你可以樂觀鎖的機制進行操作
update table set count= count-1,version=version+1 where version =123 and userid=123

使用者主鍵活動id做聯合唯一主鍵約束

解決了,聯合主鍵約束,以及使用mysql的INSERT IGNORE INTO table命令就可以了。

資料庫insert操作本身帶鎖。
一天只能有一次機會,userid和日期欄位加一個聯合維一索引就可以,不太理解防止並發是啥子意思。。

隊列或者樂觀鎖

做一個唯一索引就行了

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.