亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql insert 并發問題

mysql insert 并發問題

HUX布斯 2019-04-14 11:28:45
問題:我有兩張表,一張是優惠券活動表,另一個是用戶領取優惠券的明細表。如下CREATETABLE`coupon_activity`(`act_id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主鍵',`act_code`char(6)NOTNULLDEFAULT''COMMENT'活動編碼',`coup_issue_num`int(11)NOTNULLDEFAULT'0'COMMENT'優惠券發行量',`coup_per_num`int(11)NOTNULLDEFAULT'0'COMMENT'單個用戶可領取數',PRIMARYKEY(`act_id`),UNIQUEKEY`act_code_idx`(`act_code`)COMMENT'活動編碼唯一索引')ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='優惠券活動表';CREATETABLE`coupon_detail`(`coup_id`int(11)NOTNULLAUTO_INCREMENT,`act_code`char(6)NOTNULLDEFAULT''COMMENT'活動編號',`coup_code`char(6)NOTNULLDEFAULT''COMMENT'優惠券編碼',`coup_user_id`int(11)NOTNULLDEFAULT'0'COMMENT'領取券用戶id',PRIMARYKEY(`coup_id`),UNIQUEKEY`coup_code_idx`(`coup_code`)USINGBTREECOMMENT'優惠券編碼唯一索引',KEY`coup_user_idx`(`coup_user_id`)USINGBTREECOMMENT'用戶id普通索引',KEY`act_code_idx`(`act_code`)USINGBTREECOMMENT'活動編碼普通索引')ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='優惠券明細表';假如現在有一個編碼為act_code='000000'的優惠券活動,限定的沒每個人只能領一張券,現在用戶id=10的用戶來領取該活動的券,在不考慮并發時的代碼如下(#{}里面的字段表示前面的sql語句查出來的值):begin;select*fromcoupon_activitywhereact_code='000000';//當前10號用戶領取該活動優惠券的數量selectcount(coup_id)ascount_perfromcoupon_detailwherecoup_user_id=10andact_code=#{act_code};//插入明細表當前用戶領取量是否小于每個用戶可領取數if(#{count_per}
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

提供一個思路供參考,寫一條復雜的insert語句如下:
insertintocoupon_detail
select1,act_code,'000000',10from
(selectcount(coup_id)ascount_per
fromcoupon_detail
wherecoup_user_id=10andact_code=#{act_code}
)TMP
whereTMP.count_per<#{coup_per_num};
這樣每次insert前會去檢查先決條件.沒有具體去試,但原則上我覺得應該可以解決你的問題.
                            
查看完整回答
反對 回復 2019-04-14
  • 2 回答
  • 0 關注
  • 317 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號